Paxos算法

Paxos算法


目录

  1. Paxos算法
  2. ZAB协议

1. Paxos算法

ZooKeeper 分布式一致性算法的原型,就是 Paxos 协议。下面简单分析一下 Paxos 协议。Paxos 中有三类角色 Proposer、Acceptor 及 Learner,相当于 ZooKeeper 集群中的 Leader、Follower 和 Observer。

  • 提议者(Proposer):提议一个值
  • 接受者(Acceptor):对每个提议进行投票
  • 告知者(Learner):被告知投票的结果,不参与投票过程

简单地说,Paxos 的原理是:Proposer 将发起提案(value)给所有 Accpetor,超过半数 Accpetor 获得批准后,Proposer 将提案写入 Accpetor 内,最终所有 Accpetor 获得一致性的确定性取值,且后续不允许再修改。

在这里插入图片描述


执行过程

规定一个提议包含两个字段:[n,v],其中 n 为序号(具有唯一性),v 为提议值。

1. Prepare 阶段

下图演示了两个 Proposer 和 三个 Acceptor 的系统中运行该算法的初始过程,每个 Proposer 都会向所有的 Acceptor 发送 Prepare 请求。
在这里插入图片描述
当 Acceptor 接收到一个 prepare 请求,包含的提议为 [n1,v1],并且之前还未接收过 Prepare 请求,那么发送一个 Prepare 响应,设置当前收到的提议为 [n1,v1],并保证以后不再接受序号小于 n1 的提议。

如下图,Acceptor 在收到 [n=2,v=8] 的 Prepare 请求时,由于之前没有接收过提议,因此就发送一个 [no previous] 的 Prepare 响应,设置当前接收到的提议为 [n=2,v=8],并保证以后不再接受序号小于 2 的提议。其他的 Acceptor 类似。
在这里插入图片描述

如果 Acceptor 接收到一个 Prepare 请求,包含的提议为 [n2,v2],并且之前已经接收过提议 [n1,v1]。如果 n1 > n2,那么就丢弃该提议请求;否则,发送 Prepare 响应,该 Prepare 响应包含之前已经接收过的提议 [n1,v1],设置当前接收到的 [n2,v2],并保证以后不会再接受序号小于 n2 的提议。

如下图,Acceptor Z 收到 Proposer A 发来的 [n=2,v=8] 的 Prepare 请求,由于之前已经接收过 [n=4,v=5] 的提议,并且 n>2 ,因此就抛弃该提议请求;Acceptor X 收到 Proposer B 发来的 [n=4,v=5] 的 Prepare 请求,因为之前接收到的提议为 [n=2,v=8],并且 2<4,因此就发送 [n=2,v=8] 的 Prepare 响应,设置当前接收到提议为 [n=4,v=5],并且保证以后不再接受序号小于 4 的提议。Acceptor Y 类似。在这里插入图片描述

2. Accept 阶段

当一个 Proposer 接受到超过一半的 Acceptor 的 Prepare 响应,就可以发送 Accept 请求。

Proposer A 接受到两个 Prepare 响应之后,就发送 [n=2,v=8] Accept 请求。该 Accept 请求会被所有的 Acceptor 丢弃,因为此时所有的 Acceptor 都保证不接受序号小于 4 的提议。

Proposer B 过后也收到了两个 Prepare 响应,因此也开始发送 Accept 请求。需要注意的是, Accept 请求的 v 需要取它接收到的最大提议编号对应的 v 值,也就是 8。因此它发送 [n=4,v=8] 的Accept 请求。
在这里插入图片描述

3. Learn 阶段

Acceptor 接收到 Accept 请求时,如果序号大于等于该 Acceptor 承认的最小序号,那么就发送 Learn 提议给所有的 Learner。当 Learner 发现有大多数的 Acceptor 接收了某个提议,那么该提议的提议值就被 Paxos 选择出来。
在这里插入图片描述


约束条件
  1. 正确性
    指只有一个提议值会失效。
    因为 Paxos 协议要求每个生效的提议被多数 Acceptor 接收,并且 Acceptor 不会接受两个不同的提议,因此可以保证正确性。

  2. 可终止性
    指最后总会有一个提议生效。
    Paxos 协议能够让 Proposer 发送的提议朝着能被大多数 Acceptor 接受的那个提议靠拢,因此能保证可终止性。


在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值