Paxos
2017-08-04 本文已影响29人
浑身演技
算法陈述
- 阶段一
1.Proposer选择一个提案编号Mn,然后向Acceptor的某个超过半熟的子集成员发送编号Mn的Prepare请求。
2.如果一个Acceptor收到一个编号为Mn的Prepare请求,且编号Mn大于该Acceptor已经响应的所有Prepare请求的编号,那么它就会将它已经批准过的最大编号的提案作为响应反馈给Proposer,同时该Acceptor会承诺不会再批准任何编号小于Mn的提案。举例来说,假定一个Acceptor已经响应过所有的Prepare请求对应的提案编号分别为1、2、...、5和7,那么该Acceptor在接收到一个编号为8的Prepare请求后,就会将编号为7的提案作为响应反馈给Proposer。
- 阶段二
1.如果Proposer收到来自半数以上的Acceptor对于其发出的编号为Mn的Prepare请求的响应,那么它就发送一个针对[Mn,Nn]提案的Accept请求给Acceptor。注意,Vn的值就是收到的响应中编号最大的提案的值,如果响应中不包含任何提案,那么它就是任意值。
2.如果Acceptor收到这个针对[Mn,Vn]提案的Accept的请求,只要该Acceptor尚未对编号大于Mn的Prepare请求作出响应,他就可以通过这个提案。
算法角色及其作用
- Proposer 生成提案
- Acceptor 批准提案
- Learner 获取提案
请求类型
- Prepare 请求
Proposer向Acceptor发送的请求(可参见阶段一 1)
- Promise 请求
Acceptor向Proposer发送的请求(可参见阶段一 2)
- Propose 请求【带有提案的值】
Proposer向Acceptor发送的请求(可参见阶段二 1)
- Accept 请求 【带有提案的值】
Acceptor向Proposer发送的请求(可参见阶段二 2)
参考资料