Paxos算法证明

Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。

完整的Paxos算法如下。

Paxos通过(chosen)一个指令分为两个阶段:

1. prepare阶段

p1.proposer选择一个投票时间b并将prepare请求发送给acceptors中的一个多数派;

p2.acceptor收到prepare消息后,如果投票时间大于它已经回复的所有prepare消息,则acceptor将自己上次的批准回复给proposer,并承诺不再批准投票时间小于b的投票;

2. accept阶段

a1.当一个proposer收到了多数派acceptors对prepare的回复后,就进入批准阶段。Proposer选择所有prepare回复的批准中,最大投票时间对应投票的提议作为提议。否则,如果所有的回复中都表明之前没有批准过任何提议,则proposer可以选择任何指令作为提议。最后,proposer把投票时间b和提议作为accept请求发送给所有已经回复prepare请求的acceptors。

a2.在不违背自己向其他proposer的承诺的前提下,acceptor收到accept请求后即批准这个请求。

若提议获得多数派 acceptors 的接受,则该提议通过(chosen)。

一致性证明

要证明Paxos算法的一致性,只需要证明:

  1. 设b2<b1,b1,b2分别为两次paxos执行的投票时间。

  2. 则如果b1通过的指令为v,那么b2的指令要么通不过,要么是同一个指令v。

也就是说后面通过的指令和前面通过的指令是同一个,一致性是显然的。

证明:

用归纳法。

1.由于指令v在b1次投票获得了通过。则b1次投票的a1阶段的提议一定是v。观察a1阶段的过程,这说明这时候大多数acceptor在p2阶段的所有回复中,最大投票时间对应提议为v,设这个最大投票时间为k,并且b1>k。

2观测k'(b1<k'<k)次投票的情况。首先,观察最后一次投票b1次投票中的a1阶段,大多数的acceptor在p2阶段都没有在比k更大的投票时间中投过票。因此,k'次投票通过的指令要么通不过,要么是v.

3.我们再观察k次投票的情况。首先,观察最后一次投票b1次投票中的a1阶段,大多数的acceptor在p2阶段都没有在比k更大的投票时间中投过票。然后,第1步又说明proposer在k次投票中的提议为v,否则不会有acceptor批准v.因此,k次投票通过的指令要么通不过,要么是v.

4.根据归纳法,我们可以证明对于小于k次的投票,指令要么通不过,要么是v.

命题得证。

注:完整的Paxos协议非常复杂(是我见过最复杂的通信协议),这里只是一个粗略的描述,省略了很多词汇的明确定义以及过程的详细描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值