博客
关于
分布式-一致性模型
3月 02 2020

前提知识

为了描述现实世界中:时间, 事件,顺序。

全序关系(线性顺序):
对于 a,b,c 属于集合 S

完全性:a<=b 或 b<=a
反对称性:若 a<=b 且 b<=a 则 a=b
传递性:若 a<=b 且 b<=c 则 a<=c

偏序关系:
对于 a,b,c 属于集合 S

自反性:a<=a
反对称性:若 a<=b 且 b<=a 则 a=b
传递性:若 a<=b 且 b<=c 则 a<=c

物理时钟:
计算机中的时钟是一个物理硬件通常称为计时器,计算机的计时器通常是一个石英晶体管。石英晶体管以一定的频率振荡。然后有两个寄存器与每个石英晶体相联,一个是计数器,另一个是保持寄存器。石英晶体振荡使得计数器减1。当计数器为0时产生一个中断,然后计数器从保持寄存器中重新装入初始值。计数器产生的中断称为时钟滴答。当产生一个中断时,操作系统就会响应中断并调用中断处理程序将时钟存储器中的值加1。计算中物理时钟的的主要问题是时钟偏移(clock skew)。通俗点描述时钟偏移就是钟摆摆动的偏移变慢或者变快或者时快时慢导致时钟不同步。
对单台机器没有影响,在分布式系统中,整个分布式系统中的时钟不同步的话会导致依赖时钟同步的程序有问题,就会产生时序不一致。
解决物理时钟不同步的算法(网络时间协议、Berkeley算法、Critian算法)

逻辑时钟:
与物理时钟不同逻辑时钟关注点在事件先后的相对性 ,这个时间不一定与实际时间相同。
逻辑时钟的概念是由著名的分布式系统科学家 Leslie Lamport (2013年图灵奖得主) 提出的, 在他的那篇著名的论文「Time, Clocks and the Ordering of Events in a Distributed System」 的介绍上,lamport提到了著名的狭义相对论:

Special relativity teaches us that there is no invariant total ordering of events in space-time; different observers can disagree about which of two events happened first. There is only a partial order in which an event e1 precedes an event e2 iff e1 can causally affect e2.
Leslie Lamport 《Time, Clocks and the Ordering of Events …》

爱因斯坦的狭义相对论告诉我们,时空中不存在绝对的全序事件顺序,不同的观察者可能对哪个事件是先发生的无法达成一致。 但是有偏序关系存在,当事件e2是由事件e1引起的时候,e1和e2之间才有先后关系。

【拓展】

向量时钟
版本向量
区间树时钟

什么是一致性:

定义为:
Validity:有效性(合法性),如果所有节点中的数据只有 0 和 1 两种,那么最后达成一致的决议一定是 0 和 1 这两种的一个。不可能说算法莫名其妙的达成一个一致的数值如 -1。
Agreement:一致性,所有节点达成一致的决议。
Termination:终止性,所有正常运行的节点最终都能够做出决议。

线性一致性 (Linearizability)(原子一致性)

线性一致性利用了事件的提交顺序,它保证任何读操作得到的数据,其顺序跟读/写事件的提交顺序一致。
要求:全局时钟 全序

顺序一致性 (Linearizability)

只保证每个节点上的事件顺序一致,对节点之间的事件顺序只有非常宽松的要求。
要求:单节点 全序 多节点 偏序

因果一致性 (Linearizability)

同样只保证每个节点上的事件顺序一致,但是对节点之间的事件顺序的要求比顺序一致性更宽松
要求:逻辑时钟 偏序

最终一致性 (Linearizability)

总会存在一个时刻(而不是立刻),系统达到一致的状态