paxos算法

论文原文 https://www.jianshu.com/p/c7ae21809197

深入浅出理解版 https://my.oschina.net/u/150175/blog/2992187

腾讯开源实现 https://github.com/Tencent/phxpaxos/blob/master/README.zh_CN.md

源码解读 https://www.jianshu.com/p/9f1a874a39e5

注意:一个完整的提案由{编号n,提案值v}两部分组成。我们只关心最终的提案值,提案编号的唯一用途在于确定提案值。

  1. Proposer选择新的编号n,并发送到所有的Acceptor。
  2. Acceptor接收到请求后完成如下工作:
    2.1 承诺(promise):承诺不再accept所有编号小于n的请求,即reject编号小于n的请求。
    2.2 返回(reply):返回当前小于n的最大编号所对应的提议值v(如果存在)。
  3. 如果Proposer发起的提案编号被半数以上的Acceptor接受,此时它可以真正的发起提案值,否则回到步骤一重新确定提案编号。
  4. 发起的提案值不是Proposer随意确定的。确定规则如下:
    4.1 如果步骤2.2中,一个或者多个Acceptor返回了已经被接受(accept)的提案值,新发起的提案值必须是最大编号返回的提案值。
    4.2 如果步骤2.2中,没有任何Acceptor返回已被接受(accept)的提案值,由Proposer自行发起新的提案值。
  5. Proposer发起的提案值如果被接受则提案结束,否则重复上述过程,直到确定提案值。
posted @ 2019-12-16 18:46  decq!  阅读(100)  评论(0编辑  收藏  举报