参考:https://mp.weixin.qq.com/s/KSpsa1viYz9K_-DYYQkmKA 阿里技术:一文总结:分布式一致性技术是如何演进的?
1、Paxos
Paxos达成一个决议至少需要两个阶段(Prepare阶段和Accept阶段)。
Prepare阶段的作用:
-
-
争取提议权,争取到了提议权才能在Accept阶段发起提议,否则需要重新争取。
-
-
-
学习之前已经提议的值。
-
Accept阶段:
使提议形成多数派,提议一旦形成多数派则决议达成,可以开始学习达成的决议。Accept阶段若被拒绝需要重新走Prepare阶段。
Multi-Paxos
Basic Paxos达成一次决议至少需要两次网络来回,并发情况下可能需要更多,极端情况下甚至可能形成活锁,效率低下,Multi-Paxos正是为解决此问题而提出。
Multi-Paxos选举一个Leader,提议由Leader发起,没有竞争,解决了活锁问题。提议都由Leader发起的情况下,Prepare阶段可以跳过,将两阶段变为一阶段,提高效率。Multi-Paxos并不假设唯一Leader,它允许多Leader并发提议,不影响安全性,极端情况下 退化为Basic Paxos。 Multi-Paxos与Basic Paxos的区别并不在于Multi(Basic Paxos也可以Multi),只是在同一Proposer连续提议时可以优化跳过Prepare直接进入Accept阶段,仅此而已。
应用场景:
2、Raft
不同于Paxos直接从分布式一致性问题出发推导出来,Raft则是从多副本状态机的角度提出,使用更强的假设来减少需要考虑的状态,使之变的易于理解和实现。
Raft与Multi-Paxos有着千丝万缕的关系,下面总结了Raft与Multi-Paxos的异同。 Raft与Multi-Paxos中相似的概念:
-
- Raft的Leader即Multi-Paxos的Proposer。
-
Raft的Term与Multi-Paxos的Proposal ID本质上是同一个东西。
-
-
Raft的Log Entry即Multi-Paxos的Proposal。
-
-
-
Raft的Log Index即Multi-Paxos的Instance ID。
-
-
-
Raft的Leader选举跟Multi-Paxos的Prepare阶段本质上是相同的。
-
-
-
Raft的日志复制即Multi-Paxos的Accept阶段。
-
Raft与Multi-Paxos的不同:
Raft假设系统在任意时刻最多只有一个Leader,提议只能由Leader发出(强Leader),否则会影响正确性;而Multi-Paxos虽然也选举Leader,但只是为了提高效率,并不限制提议只能由Leader发出(弱Leader)。 强Leader在工程中一般使用Leader Lease和Leader Stickiness来保证:
-
-
Leader Lease:上一任Leader的Lease过期后,随机等待一段时间再发起Leader选举,保证新旧Leader的Lease不重叠。
-
-
-
Leader Stickiness:Leader Lease未过期的Follower拒绝新的Leader选举请求。
-
Raft限制具有最新已提交的日志的节点才有资格成为Leader,Multi-Paxos无此限制。 Raft在确认一条日志之前会检查日志连续性,若检查到日志不连续会拒绝此日志,保证日志连续性,Multi-Paxos不做此检查,允许日志中有空洞。 Raft在AppendEntries中携带 Leader的commit index,一旦日志形成多数派,Leader更新本地的commit index即完成提交,下一条AppendEntries会携带新的commit index通知其它节点;Multi-Paxos没有日志连接性假设,需要额外的commit消息通知其它节点。
3、ZAB(Zookeeper Atomic Broadcast)-待补充