Paxos算法浅谈

算法背景

        在分布式系统中,需要多个节点就某个值(如更新数据库记录、提交事务等)达成一致。然而,网络分区、节点故障等问题会导致不同节点看到不同的数据,因此需要一种协议来确保一致性。

核心思想

        Paxos算法的核心思想是通过一系列消息传递和投票机制,在多个节点之间达成共识。

角色
  • 提议者(proposer):提出提议的节点
  • 接受者(Acceptor):接收并同意或拒绝提议的节点
  • 学习中(Learner):学习最终的节点
阶段
  1. 准备阶段(Prepare Phase):提议者选择一个提案编号(proposal number),并向所有接受者发送准备请求(Prepare Request)。
  2. 承诺阶段(Promise Phase):接受者接收到准备请求后,如果提案编号比它之前看到的提案编号都大,就向提议者发送承诺(Promise),承诺不再接受比这个编号小的提案,并告诉提议者自己已经接受的最高编号的提案。
  3. 提议阶段(Propose Phase):提议者在收到多数接受者的承诺后,发送提议请求(Propose Request),包含提案编号和提议的值。
  4. 接受阶段(Accept Phase):接受者接收到提议请求后,如果提案编号不小于它已经承诺的编号,就接受这个提议,并将接受结果通知给提议者和学习者。
  5. 学习阶段(Learn Phase):学习者在接收到多数接受者的接受结果后,确认提案达成一致,并将结果告知所有节点。
工作流程

1. 准备阶段

提议者:向接收者发送一个准备请求,带有一个提案编号n。

接收者:检查提案编号n是否大于自己已响应过的所有提案编号

        如果提案编号 > 已响应提案编号: 则接受者返回一个承诺消息,并承诺不再接受任何小于n的提案。

        如果提案编号 <= 已响应提案编号: 则接受者拒绝这个准备请求,并可能返回它已经响应过的最大提案编号。

案例

  • 提议者:发送准备请求,编号 n=5。
  • 接受者:已响应最大提案编号 n=7。

结果:接受者不会承诺编号 5 的提案,因为 5 小于 7,接受者拒绝这个请求,并可能告知提议者已经响应的最大提案编号是 7。

2. 承诺阶段

        提议者:在收到多数接收者的承诺后,发送包含提案编号 n 和提议值 v 的提议请求。

3. 提议阶段

        接受者接收到提议请求后,如果 n 大于它已经响应的提案编号,则接受这个提议,并向提议者和学习者发送接受通知。

4. 学习阶段

        学习者在接收到多数接受者的接受通知后,认为提案达成一致,并将结果告知所有节点。

类比

可以把Paxos算法类比成一群人在开会决策(比如选举一个班长),其中:

  • 提议者就像是提出候选人的人。
  • 接受者就像是投票的人。
  • 学习者就像是记录最终结果的人。

每次提议需要得到多数人的同意,并在得到足够多的投票后,确认并宣布最终结果。

通过案例,更近一步了解paxos:Paxos 案例-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值