paxos算法是基于消息传递来解决多个提案统一值的一致性问题的一个协议。该算法的前提是不存在拜占庭将军问题。paxos算法包括三种角色:proposer、learner和acceptor。proposer负责提出提案,acceptor负责对提案进行裁决,learner负责学习得到的提案,为了避免单点故障,用acceptor集群。主要过程如下:主要两部分,prepare阶段和accept阶段。
prepare阶段:proposer提出编号为Mn的提案,发送给acceptor结合,acceptor作出两个反馈:第一不能接受比Mn编号小的任何提案;第二如果acceptor已经批准过某个提案,向proposer返回已经批准的编号比Mn小的最大的提案值Value,并且保证不会接受编号比Mn小的提案。
如果proposer收到了acceptor集合中一半以上的响应,就会发送一个针对Mn、Vn的accept请求给acceptor集合。Vn为收到的所有响应中编号最大的提案的值。如果响应不包括Value值,则由proposer任意选择。
Accept阶段:acceptor集合收到accept响请求,只要没有收到任何编号大于Mn的prepare请求,就通过该提案。
优化:为了避免死循环,每次请求发给主proposer,让主proposer发请求给acceptor集合。