Paxos算法是Leslie Lamport于1990年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。
一、角色说明
proposers: 提出提案,提案信息包括提案编号和提议的 value;
acceptor :收到提案后可以接受(accept)提案,若提案获得多数派(majority)的 acceptors 的接受,则称该提案被批准(chosen);
learners :只能“学习”被批准的提案。
二、paxos算法的两个阶段
第一阶段:prepare
proposer选择一个提案编号n并将prepare请求发送给acceptors中的一个多数派;
acceptor收到prepare消息后,如果提案的编号大于它已经回复的所有prepare消息(回复消息表示接受accept),则acceptor将自己上次接受的提案回复给proposer,并承诺不再回复小于n的提案;
第二阶段:批准
当一个proposer收到了多数acceptors对prepare的回复后,就进入批准阶段。它要向回复prepare请求的acceptors发送accept请求,包括编号n和根据P2c决定的value(如果根据P2c没有已经接受的value,那么它可以自由决定value)。
在不违背自己向其他proposer的承诺的前提下,acceptor收到accept请求后即批准这个请求。
这个过程在任何时候中断都可以保证正确性。例如如果一个proposer发现已经有其他proposers提出了编号更高的提案,则有必要中断这个过程。因此为了优化,在上述prepare过程中,如果一个acceptor发现存在一个更高编号的提案,则需要通知proposer,提醒其中断这次提案。
算法图解
参考: