第三章-Paxos

Paxos是一种分布式系统中的共识算法,包括BasicPaxos和MultiPaxos。BasicPaxos在一轮决策中选择一个值达成共识,涉及选主、资源互斥和日志复制等问题。MultiPaxos用于连续决策多个值,通过选主优化效率。Paxos算法对理解分布式一致性至关重要,实际应用中常见于ZAB和RAFT等协议。

目录

一、Paxos基本介绍

二、Basic Paxos介绍

三、Multi Paxos介绍

四、总结


一、Paxos基本介绍

        paxos算法是分布式系统中的一个共识算法家族,也是第一个被证明正确性的共识算法。“世界上只有两种分布式共识算法,一种是paxos算法,另外一种是类paxos算法”,现在比较流行的ZAB和RAFT算法也是基于Paxos算法而设计的,所以理解paxos对理解分布式一致性共识有重要意义。

        不喜欢看理论的直接跳到流程图,个人表示可以反推理论会更容易理解。

二、Basic Paxos介绍

  • 2-1、Basic Paxos是在一轮决策中对一个或者多个被提议(propose)的值,最终选出一个值达成共识。即如果需要对多个值进行一次决策,只选出一个值来,那么这个决策的过程就是共识的过程。

  • 2-2、Basic Paxos可以解决的问题
  1. 选主;
  2. 资源互斥访问;
  3. 复制日志的一致性;
  4. 其他;
  • 2-3、 容错模型
  1. 异步网络,网络是不可靠的,消息可能丢失、重复、延迟、网络分区,但是不包括拜占庭错误,即消息不会被篡改和伪造;
  2. 只要大多数服务器还运行,决议就能继续进行;
  • 2-4、FLP定理
  1. Agrement:所有server必须对同一个值达成共识;
  2. Validity:达成共识的值必须是提议的有效值;
  3. Termination:最终会对一个值达成共识——类状态机(Paxos不一定)
  • 2-5、Safety & Liveness(满足的条件)
  1. Safety(不会有坏事发生):只有一个值达成共识;一个server不会知道某个值达成共识,除非它真的已经达成共识;
  2. Liveness(好事一定会发生):最终一定会达成共识,在多个proposer的情况下不能保证,即basic paxos是不能保证终止的,为了保证终止就需要选出一个leader,每次提议只通过一个leader发起。如果共识达成最终所有服务器都能够知道;
  •  2-6、Paxos角色构成
  1. Proposer(提案人):处理客户端请求,主动发起提议;
  2. Acceptor(接受者):被动接受来自Proposer的提议消息,并返回投票结果,通知learner;
  3. Learner(学习者):被动接受来自Acceptor的消息;
  4. 实际中一个节点会经常扮演这三个角色;
  •  2-7、Paxos二阶段协议  (统称协商阶段)   
  1. 第一阶段:Prepare阶段。Proposer向Acceptors发出proposal请求,Acceptors针对收到的proposal的序列号请求进行Promise承诺。
  2. 第二阶段:Accept阶段。Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出accept请求,Acceptors针对收到的accept请求进行Accepted处理。
  3. 第三阶段:Learn阶段。Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有Learners。

  4. 备注:多数派,即Proposer收到多少Acceptors的Promise以后才能够发送下一阶段的accept请求。

  • 超过集群一半成员组成集合
  • [n/2]+1     (n为成员总数,[]向下取整)
  • 2-8、协商阶段
  • Acceptor:令自己所见过的最大的提案编号为local.n,请求中的提案编号为msg.n。

--收到prepare请求,msg.n > local.n,则通过该请求,否则拒绝该请求,直接抛弃该请求。
--收到accept请求,msg.n >= local.n,则通过该请求,否则拒绝该请求,直接抛弃该请求。
--通过某一prepare请求,会在prepare响应中携带自己所批准过的最大提案编号对应的提案值。

  • Proposer

--收到客户端请求,先发起prepare请求。
--收到多数派prepare响应,才可以进入accept阶段。其提案值需要从prepare响应中获取。
--收到多数派accept响应,则改提案达成共识

理论知识比较难以理解,我们通过流程图加以理解:

单个Proposer发起提议的情况:

角色:P1— Proposer | A1/A2—Acceptor | L1—Learner

基本流程:

  • 第一步:P1分别向A1和A2发送proposal-1请求;
  • 第二步:A1和A2确定提案可行以后,分别向P1返回promise-1请求;
  • 第三步:P1收到A1和A2的promise-1请求后,确定提案通过,然后分别向A1和A2发送accept(1,'cat')请求——(假设之前没有收到更大的proposal的序号值);
  • 第四步:A1和A2收到accept(1,'cat')请求以后,A1和A2分别向P1和L1发送accepted(1,'cat')请求。此时流程结束,共识达成。       

多个proposer发起提议的情况:

        备注:在paxos中,proposal的序列号,要求全局递增且唯一,关于序列号生成办法后续有机会再补充,此处P1节点采用奇数递增,P2节点采用偶数递增来简单处理。

    P1—基本流程:

  • P1分别向A1和A2发送proposal-1请求。
  • A1正常返回promise-1请求,但是A2发现已经接受到P2发过来的proposal-2消息,序列号2>1,所以A2返回no-ack(或者不返回);所以P1并不满足多数派的需求,第一次共识流程结束—失败。
  • P1分别向A1和A2发送proposal-3请求;     
  • A1返回promise-3;A1上次收到的最大序列号是P1的proposal-1,也就是1,1<3所以通过。
  • A2返回promise(3,(2,'value2'));A2上次收到的最大序列号是P2的proposal-2,也就是2,2<3所以通过。这里的(2,'value2')是P2达成共识用到的accept(2,'value2') 。
  • P1收到了多数节点返回的promise,这个时候会向A1和A2发起accept(3,'value2')请求。这里需要注意的是,value2是P2前面已经达成共识的值,P1会在accept流程中使用到这个值,这意味着P1和P2达成共识的值都是value2。
  • A1、A2都向P1返回accepted(3,'value2')。
  • P1收到A1和A2的返回accepted(3,'value2'),流程结束。
  • 此时P1与P2都收到了value2这个值,意味着value2在P1和P2达成共识。

    P2—基本流程

  • 同:单个Proposer发起提议的情况(第一张流程图)

死锁情况(也叫活锁,因为进入了死循环)

        在并发环境下,死锁是必须要考虑的问题,造成死锁的原因是Paxos二阶段协议中,acceptor需要对Proposer发起的proposal请求和accept请求都根据序列号做大小的校验。上图中死锁的基本流如下:

  • P1发送proposal,A1和A2返回promise通过;
  • 在P1执行accept请求之前,P2也发送了proposal请求,此时序列号为6;
  • P1发送accept请求,acceptor发现本次accept的序列号为5,小于本地见过的最大序列号6,accept请求被否定;
  • P1重新发起proposal请求;
  • P2流程和P1一样,P1和P2都无法达成共识,进入死循环,这就是死锁

三、Multi Paxos介绍

         Basic Paxos能够解决的问题是在一轮决策中对一个或者多个被提议(propose)的值,最终选出一个值达成共识,也就是说就某一个值达成共识。而实际生产中,我们需要对连续的值达成共识,所以需要用到Multi Paxos。

  • Multi Paxos的由来:The Preliminary Protocol(初级协议)>The Basic Protocol(基本协议)->The Complete Synod Protocol(完整神会协议)->The Multi-Decree Parliament(多法令议会协议)。
  • 当需要决定多个值时就需要连续执行多层次Paxos算法,一般执行一次Paxos算法的过程称作A Paxos Run或者A Paxos Instance,连续决定多个值则就需要执行多次Paxos。
  • Multi-Paxos是由The Complete Synod Protocol衍生而来,The Complete Synod Protocol通过选主解决了进展性问题(同时也是满足一致性的)。
  • 在Paxos算法中,选主只是为了解决进展性问题,但不会影响到一致性,即使出现脑裂的情况下,Paxos算法也是安全的的,只会影响进展性。
  • 两阶段协议效率太低,可以有优化空间。在单个Leader的情况下,如果前一次已经accept成功,接下来不再需要prepare阶段,直接进行accept。
  • 一般的Multi-Paxos可以简单总结为(选主+两阶段的优化),但是选主不是必须的(舍弃一定的进展性)。
  • 多个instance可以并发的进行。

四、总结

        Paxos和Multil Paxos属于学术界理论,而我们实际生产应用中主要用到的还是RAFT和ZAB,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值