Paxos分布式系统共识算法?我愿称其为点歌算法…( 二 )


于是,听众1再次打进热线,先单独向话务员2发起了选歌提议 。

Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
在收到听众1的点歌请求后 , 话务员2看到听众1在请求中携带的之前报价是1块 , 满足大于等于自己记录的最大报价这一条件 , 于是果断接受听众1的点歌请求 。
在接受点歌请求后,话务员2要记录的东西又要增加了,她不但要记住已接受的请求的报价金额,还要记住已接受请求的点播歌曲 。然后给听众1一个回复,表示我已经接受了你的点歌请求 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
当然了,在听众1努力点歌的时候,其他听众也不会闲着对不对?
听众2虽然打进电话晚了点,但是直接发动钞能力,把自己的报价提升到了两块,来和话务员们进行通话 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
由于两块钱的报价高于本地记录的最高报价,所以话务员1和话务员2都会认可这个报价,所以她们会先把本地的最高报价值更新为两块 。
但是接下来,由于本地记录的信息有所不同,所以她们将会给出不同的答复 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
如果这时候,再来一个听众3打进电话 , 并且尝试以两块或以下的价格进行报价给前两个话务员的话,那么他的报价不会得到话务员的认可 。
这是因为我们前面说过了,话务员们都遵循拜金主义这一潜规则 , 所以她们不会接受比已记录的最高报价还要低的报价 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
在拒绝了听众3之后 , 我们再回到前面的两位听众这边 。
接下来 , 我们根据听众1和2谁先打进电话 , 把时间线划分为两个平行宇宙 。
平行宇宙1在平行宇宙1这条时间线里 , 我们假设听众1先打进电话 。
这时,仍然只有话务员2接受了听众1的点歌请求,于是听众1继续向其他话务员拨打电话,告诉她们自己要听的歌 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
在话务员3这里,她记录的最高报价还是听众1之前的1块,所以没有意外,话务员3会接受听众1的点歌请求,并更新本地的记录信息 。
但是话务员1这就不一样了,她所认可的报价已经涨到了2,所以旧的1块钱报价已经不能在她这里点歌了,因此话务员1会拒绝听众1的点歌请求 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
尽管请求没有得到话务员1的接受,但是前面我们说了,话务员之间要遵循少数服从多数的原则,听众1的点歌请求已经被半数以上话务员接受 , 那么听众1确认自己点的这首《东风破》已被选定 。
平行宇宙2让我们回到平行宇宙的分叉点 , 先回顾一下前情 , 这时听众2已经向话务员1和话务员2发出过报价,并从话务员2那里得知她已经以1块钱的报价接受了《东风破》这首歌的提案 。
那么在这条时间线中,我们让听众2先打给1、2号话务员 。
听众2这时心里会想,我们杰迷们都是有素质的人,尽管我之前想听的是《简单爱》 , 但听一下《东风破》貌似也挺不错,那么我干脆支持听众1的选择吧 。
于是,报价已被认可的他再次拿起电话打给两位话务员,发起点歌请求 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
话务员1和话务员2再次比较听众2这次携带的之前报价,均大于等于本地记录的最高报价 , 所以接受他的点歌请求 。在更新本地记录的信息后,回复信息给听众2 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
于是,听众2的点歌请求也获得了半数以上话务员的承认,那么听众2确认自己点的歌被选定 。
看到这里 , 是不是似乎感觉世界线产生了收束,难道之后的每一种结果都是《东风破》将被选定?
其实,Paxos算法中最精彩的部分在于它更像是一场博弈 , 棋局中的每一步,都可能影响最终的结果 。
平行宇宙β让我们把分叉点上的时间,再往前多回溯一点 , 回到下面这个时间点的状态,这时话务员2刚接受了听众1的点歌请求,而听众2还没有开始打热线电话 。

推荐阅读