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

n

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

文章插图
因为听众1是第一个打进热线电话的,在他之前还不存在任何报价,所以这里话务员们会无条件地先接受第一个听众的报价并记录下来,然后返回给听众1一个回复信息 。
在回复的信息中,话务员不但需要告诉听众他的报价目前最高,已经被认可了,还要说明之前没有接受过其他任何听众的点歌请求 。
Paxos分布式系统共识算法?我愿称其为点歌算法…

文章插图
这时候听众1一看,自己已经获得了超过半数以上的话务员的认可了,那么进入阶段2,告诉话务员自己想要听什么歌曲 。当然,在这个过程中,还得顺带着告诉话务员自己在上一阶段中的报价是多少 。
于是,听众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确认自己点的这首《东风破》已被选定 。

经验总结扩展阅读