分布式一致性算法:由数学证明推导出Paxos

Basic-Paxos是分布式一致性算法的元祖算法之一,现代的分布式一致性算法基本都是Basic-Paxos算法的优化、改进或简化。
由于过于晦涩难懂,Basic-Paxos也是最难理解的算法之一,然而有理由相信,直接从数学证明推导出Basic-Paxos算法是理解它最便捷的方法。

单提案表决:单轮投票一致性

定义1

设分布式节点总集合,定义集合 ,且中任意两个成员的交集不为空,则称的法定集(或称多数派)。

定义2

定义为单轮投票的全部要素的集合,为参加投票的法定集合的集合,为本轮投票的编号,为本轮提出的决议

约束α

轮投票中,每个节点只能支持一个提案

约束β

轮投票中,只有被法定集合接受的提案才被确认为本轮决议

断言A

在同时满足约束α和约束β的情况下,一轮投票中不可能同时有两个不同的提案被表决通过

断言A的证明(反证法)

假设法定集合通过了提案,法定集合通过了提案,且,由于任意两个法定集合之间存在交集,那么必定存在节点,且N同时支持提案,这违反了约束α,因此断言A成立。

多提案带来的问题

约束α和约束β定义了单轮投票一致性约束,能够保证单轮投票产生唯一合法决议。但多个不同的提案需要多轮表决来决出唯一合法决议

多提案表决:多轮投票一致性

定义3

定义R的最大通过决议表征在R轮投票之前通过的所有决议中比R轮编号小的编号最大的一轮表决所通过的表决结果,如过它不存在则定义为

约束γ

在任一轮投票中,如果,则设可以任意选定;如果,则设

断言B(弱一致性):

理想状态下(每轮投票按编号顺序产生并按序表决),在同时满足约束α、约束β和约束γ的情况下,则多轮投票后总能保证一致性

断言B的证明(反证法):

在理想状态下(每轮投票按编号顺序产生并按序表决),假设经过轮投票后,存在新的一轮投票,使得
如果,则任意自定义决议,根据约束γ,,这将导出,与假设矛盾。
如果,则,根据约束γ,,这将导出,仍与假设矛盾。

因此断言B得证。

时序导致的问题

多轮投票表决中,即使每轮投票按序产生,也不能保证最终形成决议的顺序与编号顺序一致(现实模型中的网络传输因素或系统设计因素),这将导致断言B导出的弱一致性不成立。

非理想状态下断言B的证伪:

在非理想状态下,假定存在以下表决序列,如果轮投票产生了决议,根据约束γ,
但由于的决议产生于决议发生之前,此时并不存在的表决结果,于是值此时被任意表决。
因此约束γ被破坏,断言B不成立。

多轮投票强一致性

约束δ

如果轮投票之前,存在轮投票,轮投票已经产生了表决结果,且轮投票的编号大于,则轮投票的任何决议都不被接受(轮表决被放弃并无效化)

断言C(强一致性):

在同时满足约束α、约束β、约束γ和约束δ的情况下,多轮投票后总能保持决议一致性。

断言C的证明:

假设在非理想条件下,存在下列乱序表决,根据约束δ,的表决将被无效化,等效于将从表决序列中丢弃,因此原表决序列化简为
于是被转换为理想状态下的多轮投票一致性问题,根据断言B,一致性成立,因此断言C成立。

两阶段原型导出

断言D

在支持多提案表决的一致性框架(强一致性和弱一致性)内,每一轮投票都必须遵循两阶段模型,其目的是:

第一阶段:

获取的值

第二阶段:

得出本轮决议

断言D的证明:

根据约束γ和约束δ,断言D自动成立

Basic-Paxos算法的自然导出

首先定义角色Proposers和Acceptors。Proposers提出提案,提案信息包括提案编号和提议的value(提案的内容);Acceptor收到提案后可以接受(accept)提案,若提案获得多数Acceptors的接受,则称该提案被批准(chosen)。

两阶段协议表决:

Prepare阶段
  • Proposer选择一个提案号n,向大于半数的Acceptor发送Prepare消息;
  • 如果Acceptor还没有承若过不接受编号小于m(m>n)的提案,则承诺不再接受编号小于n的提案,并返回它已经接受的编号小于n的提案中编号最大的提案。
Accept阶段
  • Proposer接受到所有Acceptor对Prepare请求的回应后,提出编号为n值为v的提案。值v是Acceptor接受到的所有编号小于n的提案中编号最大的提案的值。如果没有Acceptor接受过编号小于n的提案,则值v可由Proposer自己决定。提出提案后,向所有的Acceptor发送Accept消息,以期Acceptor接受提案。
  • 如果Acceptor没有向其它的Prepare请求承诺过不再接受编号小于m(m>n)的提案,则接受编号为n的提案。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值