应用:Google Chubby、 MegaStore 、 Spanner、 Zoomkeeper
在paxos算法中的四种角色:
Proposer:提议者;
Acceptor:决策者;
Client:产生议题者;
Learner: 最终决策学习者
算法分为两阶段执行:
阶段1
Proposer:选择一个议案编号n, 向Acceptor的多数派发送编号也为n的prepare请求
Acceptor:如果接收到的prepare请求的编号n大于它已经回应的任何prepare请求,则它就回应已经批准的编号最高的的议案(如果有的话),并承诺不再回应任何编号小于n的议案。
阶段2
Proposer:如果接收到了多数Acceptor对prepare请求(编号为n)的回应,则它就向这些Acceptor发送议案{n , v}的accept请求,其中v是所有回应中编号最高的议案的的决议,或者是proposer选择的值,如果响应中不包含议案,那么它就是任意值。
Acceptor:如果收到了议案{ n, v}的accept请求,则它就批准该议案,除非它已经回应了一个编号大于n的议案
Proposer可以提出多个议案,只要它遵循上面的算法,它可以在任何时刻放弃一个议案,如果其他Proposer已经开始提出更高编号的议案,那么最好能放弃当前的议案。因此,如果Acceptor忽略一个prepare或accept请求(因为已经收到了更高编号的prepare请求),则它应该告知proposer放弃议案。这是一个性能优化,而不影响正确性。