Paxos算法原理和应用
Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的「La」)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。
下面是网上的两篇帖子写的比较容易理解,相比原文中的议会案例,两军问题更为本土话,所以好理解一些。以两军问题为背景来演绎Basic Paxos和Paxos算法细节详解(一)--通过现实世界描述算法
学习总结:
1、每一次提议过程都有两个阶段(1.prepare 2.accept)两个阶段缺一不可
2、每一个决策者每次接收到新的提议后,都会拿当前提议的Proposalid与本节点上保存的Proposalid比较,如果新提议的id小于本地保存的id则决策者回复消息就是Rejected和已经保存的提议ID。相反如果大于已经保存的id则保存新的提议ID并回复Proposer提议者Ok。
3、提议者发送提议的时候是给所有的决策者(Acceptor)发送,在accept阶段则是给有消息回复的acceptor的决策者发送数据信息。
4、每一个Proposer (提议者)在得不到多数派的回复的时候需要重新发送提议
5、Proposer 在accept阶段得到多数决策者Acceptor们的回复消息内容不同时则取ProposalId比较大的值作为新的值发送给各个决策者保存。
6、如果所有的Proposer都收到多数决策者的回复消息则说明各个节点之间的数据已经达到一致了。
在zookeeper中的Leader选举机制就是使用的paxos算法的进化版,paxos基础算法只是能保证各个节点中的单个数据一致,但是各个节点是无法确定该什么时候提取数据,提取时间过早或者太晚都会导致数据的不一致。所以想要保证完整数据的严格一致性,还需要一次confirm。提示所有节点可以提取数据了,这样就可以实现各个节点数据的严格一致性。
如果想要让多个数据保持一致性,则可以使用multi-paxos算法来实。
除了paxos的基础算法还有一些改进版的算法,提升了算法的性能和应用范围。下面的这篇的帖子就是对Paxos各个进化版的讲解。基于消息传递解决分布式系统中一致性问题