Paxos算法中主要的角色有:
- Client:发起请求的人
- Acceptor (Voters):负责选举头头片
- Proposer:负责向Acceptor发起Clinet的提议
- Learner:当提议决定的以后,需要有所行动的人
- Leader:选举出来的做决策的Leader
basic Paxos
站在Proposer的角度
- Prepare阶段:
1) 向Acceptors发送 【prepare请求 】提案号N,然后等待Acceptors的回复
2) 当收到一定数量的Acceptors的【承诺】后,这个时候就需要设置提案。
A.如果任何Acceptor已经是Accepted状态,那么就设置为其中提议号的内容。
B.否则,Proposer选择任意想设置的内容 - Accept阶段
1) 查看所有回复的中,选择最大提案号N_m向Acceptors发起【Accept请求】。等待Acceptors的回复
2) 如果收到大多数的Acceptors发回的【Accepted请求】,则认为提案N_m最终提案,否则
站在Acceptor的角度
- Promise阶段:
1) 收到Proposer【prepare请求 】提案号为N,这个时候分两种情况:
A. 如果N比之前的【prepare请求 】的大,则Acceptor【承诺】会忽略掉所有比N小的【prepare请求 】
B. 如果Acceptor已经向某个Proposer发送过【Accepted消息*】后,则会发送已经Accepted的提案号和提案内容回去。 - Accept阶段
如果收到一个【Accept请求】提案号N_n比满足之前Promise的【承诺】,则发送【Accepted消息】,之后就不再接受任何【Accept请求】