这里我写一篇记录这几个分布式系统选举或传播的算法和协议的简单对比,用以帮助记忆。因为后面的几个或多或少的都从分布式选举算法的始祖Paxos算法而来。由于分布式选举算法非常难理解,作者本人也并非CS专业,理解难免有偏差,如果要详细的了解建议查看其他文章[1-5]。这篇文章引用了很多其他文章,并在最后总结一下几个算法和协议的不同。我们先简单总结一下Paxos算法。
一、Paxos算法
1,basic paxos算法和multi paxos思想
paxos算法非常难以理解,具体了解paxos算法,建议看这篇文章[1]。
paxos算法是1990年一个叫兰伯特的大佬提出的,据说当时能看懂的人也不是很多,paxos算法分为basic paxos算法和multi paxos思想。basic paxos算法描述的是多节点之间如何就某个值(提案 Value)达成共识,multi paxos思想描述的是执行多个 Basic Paxos 实例,就一系列值达成共识。Multi-Paxos 说白了就是执行多次 Basic Paxos ,核心还是 Basic Paxos [1]。muti paxos思想兰伯特自己也没有实现,仅仅停留在思想层面。
paxos算法的前提是没有拜占庭将军问题[2][注1],即不存在恶意投票的节点。
2,basic paxos算法
Basic Paxos 中存在 3 个重要的角色:提议者(Proposer):也可以叫做协调者(coordinator),提议者负责接受客户端的请求并发起提案。提案信息通常包括提案编号 (Proposal ID) 和提议的值 (Value)。接受者(Acceptor):也可以叫做投票员(voter),负责对提议者的提案进行投票,同时需要记住自己的投票历史;学习者(Learner):如果有超过半数接受者就某个提议达成了共识,那么学习者就需要接受这个提议,并就该提议作出运算,然后将运算结果返回给客户端。
Paxos 里面对这两个阶段分别命名为准备(Prepare)和提交(Commit)。准备阶段通过锁来解决对哪个提案内容进行确认的问题,提交阶段解决大多数确认最终值的问题[3]。
准备阶段:
提案者向多个接受者发送计划提交的提案编号 n,试探是否可以锁定多数接受者的支持;
接受者 i 收到提案编号 n,检查回复过的提案的最大编号 M_i。如果 n > M_i,则向提案者返回准备接受(accept)提交的最大编号的提案 P_i(如果还未接受过任何提案,则为空),并不再接受小于 n 的提案,同时更新 M_i = n。这一步是让接受者筛选出它收到的最大编号的提案,接下来只接受其后续提交。
提交阶段:
某个提案者如果收到大多数接受者的回复(表示大部分人收到了 n),则准备发出带有 n 的提交消息。如果收到的回复中带有提案 P_i(说明自己看到的信息过期),则替换选编号最大的 P_i 的值为提案值;否则指定一个新提案值。如果没收到大多数回复,则再次发出请求;
接受者 i 收到序号为 n 的提交消息,如果发现 n >= P_i 的序号,则接受提案,并更新 P_i 序号为 n。
这里需要注意的是,paxos算法解决的是多个提案者+多个接受者的情况,即有多个节点都有提出选举的权利,也有多个节点对提案做出投票。
注1:
拜占庭帝国(Byzantine Empire)军队的几个师驻扎在敌城外, 每个师都由各自的将军指挥. 将军们只能通过信使相互沟通. 在观察敌情之后, 他们必须制定一个共同的行动计划, 如进攻(Attack)或者撤退(Retreat), 且只有当半数以上的将军共同发起进攻时才能取得胜利. 然而, 其中一些将军可能是叛徒, 试图阻止忠诚的将军达成一致的行动计划. 更糟糕的是, 负责消息传递的信使也可能是叛徒, 他们可能篡改或伪造消息, 也可能使得消息丢失
二,Raft算法
Paxos 算法虽然给出了共识设计,但并没有讨论太多实现细节,也并不重视工程上的优化,因此后来在学术界和工程界出现了一些改进工作,包括 Fast Paxos、Multi-Paxos,Zookeeper Atomic Broadcast(ZAB)和 Raft 等。这些算法重点在于改进执行效率和可实现性。
其中,Raft 算法由斯坦福大学的 Diego Ongaro 和 John Ousterhout 于 2014 年在论文《In Search of an Understandable Consensus Algorithm》中提出,基于 Multi-Paxos 算法进行重新简化设计和实现,提高了工程实践性。Raft 算法的主要设计思想与 ZAB 类似,通过先选出领导节点来简化流程和提高效率。实现上解耦了领导者选举、日志复制和安全方面的需求,并通过约束减少了不确定性的状态空间。
算法包括三种角色:领导者(Leader)、候选者(Candid

最低0.47元/天 解锁文章
601

被折叠的 条评论
为什么被折叠?



