Paxos

作者: 浑身演技 | 来源:发表于2017-08-04 22:14 被阅读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)

    参考资料

    相关文章

      网友评论

          本文标题:Paxos

          本文链接:https://www.haomeiwen.com/subject/gqqykxtx.html