这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
分布式的部分内容多且复杂,上一篇笔记讨论了拜占庭将军问题,本文继续探讨分布式系统的一般性知识。
共识和一致性
- Eventually consistent(最终一致性):在读写并发的场景下,当不同的客户端读取正在写入的数据时,在写入的这段时间内,不同的执行读操作的客户端可能会读取到一致或不一致的数据,但是在写入完成过后,所有的执行读取操作的客户端都能读到一致的数据。
- Linearizabillity(线性一致性、强一致):同样在读写并发的场景下,当不同的客户端读取正在写入的数据时,某个客户端在读到写入的新值后会同步给所有正在执行读操作的其他客户端。
由于保持线性一致性需要进行同步协商操作,来寻求一致,因此会引入时间的消耗,导致系统延迟,降低系统可用性。
分布式系统中的时间和事件顺序
本部分内容简单介绍图灵奖得主Lesile Lamport提出的一个分布式系统模型的相关基本概念。 在论文Time, clocks, and the ordering of events in a distributed system中,作者提出了一种使用箭头和时序序列来表示事件执行顺序的分析图,如下图所示
从图中举例,从p1->q2的指向代表了事件p1向事件q2发送消息。同时如果两个事件没有任何指向关系则认为这两个事件并行发生。基于如上的定义,Lamport提出了Lamport逻辑时钟,如下图
图中的虚线称为Tick Line, 两条tick Line之间为一个逻辑时间单位。同时,还定义了一个函数Ci(),接受的输入为事件,输出为输入时间的逻辑时间点。从图上举例,已知同一进程p1早于p2发生,规定Ci(p1)<Ci(p2),不同进程,p1向q2发送消息,规定Ci(p1)<Ci(q2)。以这样的定义为基础,我们就能够去将系统内所有事件间的逻辑时间顺序进行全序排序从而得到系统事件执行的顺序关系,以此来调度规划分布式并发程序的执行。
同时需要注意逻辑时间与物理时间不是完全对应的,在逻辑时间上早于的关系,在物理时间中可能刚好相反,具体可以在Lamport的论文中学习。
参考
1.Time, clocks, and the ordering of events in a distributed system