近来看了《从Paxos到zookeeper》一书,文中对于paxos的推导过程,一直看得迷迷糊糊,在网上找了《Paxos Made Simple》论文,才发现,《从Paxos到zookeeper》一书几乎就是对该文的直接翻译,然后又找了一些中文的博客之类的,始终是懂非懂,究其原因,《Paxos Made Simple》并非对于paxos算法的严谨证明,文中多次出现“value值被chosen之后”这种类似的描述,而在分布式系统中,是很难确定事件之间的先后顺序的,文中的推理过程避开了严格的事件先后顺序,所以总给人一种“好像是这样,又好像不太对的感觉”。
现在我们撇开不管如何推导出这个算法,只管如何证明这个算法是正确的即可,重述一下已知条件及目的:
一些名词定义:
Proposer:负责提出一个提案。
Acceptor:负责批准提案。
提案格式:[number,value]其中,number是提案的编号,value是想要被确定的值。
Value值:可以理解为提案的具体内容,如:A/B/C三人投票选班长,A/B/C共有三票,每人都有一个唯一的编号M0-M2,但是其Value值可以相同,例如A和B选B当班长,C选C当班长,这Value值便是B和C,对应的提案便是[M0,B],[M1,B],[M2,C]。
提案选定的条件:超过半数的Acceptor批准(accep