浅谈分布式一致性 | 青训营笔记

140 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第9天,学习了一致性的相关算法熟悉了raft等相关框架,但还在整理中,故先将概念记录并分享出来。

浅谈分布式一致性

分布式面临的挑战

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

  • 数据规模越来越大
  • 服务可用性要求越来越高
  • 快速迭代的业务要求,系统足够易用

理想中的分布式系统

  • 高性能:可扩展、低时延、高吞吐
  • 正确:一致性、易于理解
  • 可靠:容错、高可用

一致性共识算法

强一致性(原子一致性,顺序一致性)

  • 任何一次读都能读到某个数据的最近一次写的数据。

  • 系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。

简言之,在任意时刻,所有节点中的数据是一样的。例如,对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。

弱一致性

数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。

最终一致性

不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。简单说,就是在一段时间后,节点间的数据会最终达到一致状态。

共识(Consensus)

在介绍共识协议之前,我们要来聊聊它的三个属性。

  • 正确性(Validity):诚实节点最终达成共识的值必须是来自诚实节点提议的值。
  • 一致性(Agreement):所有的诚实节点都必须就相同的值达成共识。
  • 终止性(Termination):诚实的节点必须最终就某个值达成共识。