码迷,mamicode.com
首页 > 编程语言 > 详细

Paxos算法

时间:2018-02-13 10:28:18      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:死循环   accept   特定   nbsp   解决   log   通过   pre   bsp   

Paxos算法可分为两二段:

阶段一:

1.Proposer选择一个提案号Mn,然后向Acceptor的某个超过半数的子集发送编号为Mn的Prepare请求。

2.如果一个Acceptor收到一个提案编号为Mn的Prepare请求,且Mn大于该Acceptor已响应过的所有编号,那么它会将它已经批准过的最大的编号提案相应给Proposer,同时承诺不会再批准任何编号小于Mn的提案。

阶段二:

1.如果Proposer收到来自半数以上的Acceptor对其发出的编号为Mn的Prepare请求的相应,那么它就会发送一个[Mn,Vn]提案的请求给Acceptor,Vn是一阶段中响应的最大编号的提案值,如果响应中不包含任何提案值,那么他就是任意值。

2.如果Acceptor收到[Mn,Vn]的提案请求,只要该Acceptor尚未对编号大于Mn的请求做出响应,他就可以通过这个提案。

 

提案的获取Acceptor将批准的提案发送给一个特定的Learner集合,该集合中的每个Learner都可以在一个提案被选定后通知所有其他的Learner。

通过选取主Proposer保证算法的活性:

如果两个Proposer交替向Acceptor发送Prepare请求,那么每次Acceptor都收到更大的Mn(Mn+1),就会在二阶段忽略上一个Proposer发送的[Mn,Vn]提案。这样交替忽略就是死循环,不会通过提案。

解决办法是选出一个主Proposer,只有主Proposer可以发出提案。

 

Paxos算法

标签:死循环   accept   特定   nbsp   解决   log   通过   pre   bsp   

原文地址:https://www.cnblogs.com/tomasman/p/8445902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!