关于什么是paxos,网上有很多介绍,这三种角色分类是什么,我就不多说了,直接上干货。
在paxos算法中可以分为三个阶段
一、阶段一
1、 proposter向acceptors发送prepare(N_A)。
2、 acceptors收到prepare(N_A)如果N_A>N_H,回复了promise(N_A,V_A),并置N_H=N_A。否则回复reject(N_H)。
二、阶段二
1、 proposter收到acceptors集合中的任意一个majority发送的promise(N_A,V_A)后,如果所有V_A为空,则自由选择一个V_`发送Accept(N_A,V_A`),否则选择V_A中具有最大编号的value的V_i,发送promise(N_A,V_i)。
2、 如果proposter收到reject(N_H),则回到第一阶段第一步发送prepare(N_H+1).
3、acceptors如果收到promise(N_A,V_A`)或者promise(N_A,V_i),如果N_A<N_H,则回复nack(N_H),暗示已经有至少一个除了他之外的proposter已经广播过具有更高编号的提案。否则置本地的V_A=V_A,并回复accepted。
4、proposter如果收到nack(N_A),则回到第一阶段第一步发送prepare(N_H+1).
5、如果proposter收到了acceptors集合中的任意一个majority发送的accepted,表明选举完成,向其他proposters发送自己成为leader的消息。向learners发送value值。
三、阶段三
1、 learns学习value然后执行任务。
注:
N_A:为该次提案的编号。
N_H:为当前提案的最高编号。
V_i:是V_A提案中编号最高的value。
promise(N_A,V_A):向proposter保证不再接受编号大于N_H的提案。
Accepted:向proposter发送决议被通过的消息。
V_A:acceptors之前审批过的决议。
N_H:acceptors之前接收提案的最大编号