Paxos算法

本文详细解读了Paxos算法的角色划分(提议者、接受者和学习者)、流程步骤(准备和接受阶段)及其实现原理。核心内容包括二阶段提交达成共识和容错性设计,适用于分布式系统一致性保障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

paxos是解决分布式系统数据一致性的重要权威算法之一

算法介绍

系统角色

在paxos算法中,不同的分布式节点,共有三种角色身份,分别为提议者,接受者和学习者,各自的职责各不相同。

  • 提议者(Proposer):提议一个值,用于投票表决。但在绝大多数场景中,集群中收到客户端请求的节点,才是提议者,这样做的好处是,对业务代码没有入侵性,也就是说,我们不需要在业务代码中实现算法逻辑,就可以像使用数据库一样访问后端的数据。

  • 接受者(Acceptor):对每个提议的值进行投票,并存储接受的值,比如A、B、C三个节点。 一般来说,集群中的所有节点都在扮演接受者的角色,参与共识协商,并接受和存储数据。

  • 学习者(Learner):被告知投票的结果,接受达成共识的值,存储保存,不参与投票的过程。一般来说,学习者是数据备份节点,比如“Master-Slave”模型中的Slave,被动地接受数据,容灾备份。

其实,这三种角色,在本质上代表的是三种功能:

  • 提议者代表的是接入和协调功能,收到客户端请求后,发起二阶段提交,进行共识协商;
  • 接受者代表投票协商和存储数据,对提议的值进行投票,并接受达成共识的值,存储保存;
  • 学习者代表存储数据,不参与共识协商,只接受达成共识的值,存储保存。

算法流程

对于一个提案,由提案编号和值组成,称为[M,V]

准备(Prepare)阶段

提议者递增生成一个提案标号M,将该提案标号发送给所有的接受者,表明我将要发起标号为M的提案,接受者收到提案之后,如果接受者已经收到了比M更大的提案标号,那么就会丢掉这个提案,不做任何返回,如果接受者目前还没有收到过提案,或者收到的提案标号小于M,那么他就会接受这个提案,并将标号M和之前已经设置的value值返回回去,如果之前没有设置过value,也就是没有接受过任何的提案,就返回空的value,并承诺不会再接受任何比M小的提案。

这里说要说明的是,准备阶段提议者只发送提案的编号,不用发送值;无论接受还是不接受,接受者会将自己现阶段已经接受的最大提案标号返回给提议者。

接受(Accept)阶段

如果提议者收到了超过半数以上的接受者的同意返回,就会发送接受请求,将提案标号和value都发送给接受者,如果接受者们返回的是空值,那value可以是任意值,如果返回了value,那value只能和之前保持一致。因为paxos算法要保证的就是大家同意了某一个提案之后,该值就不能改变。

在接受阶段可能会出现并发的情况,也就是准备阶段提议者收到了大多数接受者的同意返回,但是在发送接受请求之前,接受者们收到了一个提案编号更大的提案,并且已经被接受了,那么这个时候如果收到了标号小的提案,就会拒绝。

这里需要说明的是,不是准备阶段收到了大多数接受者的同意返回,该提案就一定会被接受,因为可能会被一个提案编号更大的提案捷足先登,paxos算法就是根据提案的标号大小来判断优先级。

如果集群中有学习者,当接受者通过了一个提案时,就通知给所有的学习者。当学习者发现大多数的接受者都通过了某个提案,那么它也通过该提案,接受该提案的值。

总结

  1. 你可以看到,Basic Paxos是通过二阶段提交的方式来达成共识的。二阶段提交是达成共识的常用方式,如果你需要设计新的共识算法的时候,也可以考虑这个方式。

  2. 除了共识,Basic Paxos还实现了容错,在少于一半的节点出现故障时,集群也能工作。它不像分布式事务算法那样,必须要所有节点都同意后才提交操作,因为“所有节点都同意”这个原则,在出现节点故障的时候会导致整个集群不可用。也就是说,“大多数节点都同意”的原则,赋予了Basic Paxos容错的能力,让它能够容忍少于一半的节点的故障。

  3. 本质上而言,提案编号的大小代表着优先级,你可以这么理解,根据提案编号的大小,接受者保证三个承诺,具体来说:如果准备请求的提案编号,小于等于接受者已经响应的准备请求的提案编号,那么接受者将承诺不响应这个准备请求;如果接受请求中的提案的提案编号,小于接受者已经响应的准备请求的提案编号,那么接受者将承诺不通过这个提案;如果接受者之前有通过提案,那么接受者将承诺,会在准备请求的响应中,包含已经通过的最大编号的提案信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值