Paxos算法之Basic Paxos

Posted 程序技术分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paxos算法之Basic Paxos相关的知识,希望对你有一定的参考价值。

        在分布式一致性算法中,paxos算法可以说是地位很高,目前最常用的raft算法,ZAB协议都是由它演进的,兰伯特当时提出的paxos算法,是包含两部分的,

        1 Basic paxos 描述的是多节点之间如何就某个值达成共识

        2 Mulit-Paxos描述的是多个Basic paxos实例,对一系列值达成的共识


        思考一个问题:

        如果对于一个分布式集群,集群中有A,B,C三个节点,作为kv存储系统,如果集群存储,要设置一个只读变量T(只读变量要先复制,赋值后无法修改变更),如果客户端1设置值为3,客户端2设置值为7,由于只能设置一次,如何保证在三个节点上的值是一样的呢?

        Basic Paxos 就是解决这种问题的算法。


Basic Paxos的三种身份

        提议者,提议的发起者,提议一个值,用于投票的发起和表决。一般提议者是某个接到客户端请求的集群实例,

        接受者,对接受到的提议的值,进行投票,并存储。一般集群中所有的节点都作为接受者

        学习者,被告知投票后的结果,不参与投票,只是负责保存投票结果,作为容灾备份

          关系如下图所示,两个提议者都想提议设置自己想要设置自己想要的值,然后 把这两个值让集群节点去投票,最后选出来后,交给学习者去保存备份。

            这个图你可能会有疑问,刚刚说,提议者是集群某个节点,接收者是集群,看上面的图,感觉提议者不是集群的三个节点之一,是另外的身份,上面的图是为了分析三者之间的关系,真正的逻辑是下面的,

        客户端发起一个请求后,集群某个节点会收到请求,此时收到请求的节点就作为提议者,图中的A和C 对应上图中的提议者,然后 提议者又作为接受者,把决议在集群内部协调传输,如上图流程,让集群各个节点参与决议,最后把决议结果告诉学习者。

Paxos算法之Basic Paxos

        现在你已经明白是怎么样的流程去决议了,下面在来研究一下,决议的详细流程是怎么样?


如何达成共识的?

        说到提议,一定少不了,提议编号,用来标识不同的提议,就好比送标书,不可能你只送上一份写的很好价格的标书,不标识这个标书是出自你们公司。其实这个算法达成共识的逻辑和标书差不多,大家先把标书送上(就是客户端想要设置的值),然后价高者得,因此Basic Paxos也是分为两个阶段

       

 1 准备阶段

        假设客户端1的请求,提案编号为1,客户端2的请求,提案编号为5,并且集群中A,B 两节点先收到编号为1的提案,C先收到提案编号为5的提案,如图所示,(下面为了方便了解提议者和接收者之间的流程,会把客户端作为提议者,自己心里明白就行)

Paxos算法之Basic Paxos

当节点A和节点B收到提议后(第一阶段只是提议编号,并无提议内容),发现自身以前没有收到过提案,就会通过这个提议,并返回无提议,承诺以后不再接受小于等于1编号的提议。当时间轴向右,会发现节点A和节点B收到了客户端2的请求后,发现提议编号为5,大于1,会通过编号为5的提议,承诺不再接受任何小于等于5提议编号的提议。节点C收到客户端2的请求后,由于自身以前没收到过提议,会通过编号为5的提议,承诺不再接受任何小于等于5提议编号的提议,当C在收到客户端1的请求后,会发现提议标号小于5,舍弃。最终如图所示

2 提议阶段

        提议者1在收到A ,B接收者最开始返回的无提议,承诺以后不再接受小于等于1编号的提议的信息后,判断已经有两个接受者投票通过了大于半数,会把具体的提议内容 3 发送给接受者。提议者2在收到A ,B,C接收者返回的通过后,判断大于半数,会把具体的内容 7 发送给接受者。


当集群中三个节点收到提议者发送的具体提议后,会这样处理。

        由于提议1的提议编号为1,小于集群中三个几点,约定能通过的提议编号不能小于5,所以提案1会被拒绝

        由于提议2的提议编号为5,等于预定能通过的最小编号,所以提议会被通过,就接收了值为7,三个接受者就T的值为7达成了一致的共识。

        总结一下:就好比政府 要和某个企业合作一个大项目,各个公司都有自己的方案,首先他们把自己公司的资质,收益先汇报一下(协议编号给接收者),评审团在审核的时候会选择一个最好的(不允许小于该值的协议编号),在审核的过程可能觉得A公司还不错,有两票的结果,就通知A公司做准备,后面有发现了B更好,最终决定了B,B也接到通知,A,B公司都给了自己的方案,由于已经内定好了,公司资质不能低于B,所以A的方案就被拒绝了。


以上是关于Paxos算法之Basic Paxos的主要内容,如果未能解决你的问题,请参考以下文章

最终一致性Basic-Paxos算法

雷火UX数据挖掘初识分布式共识算法Basic Paxos

Basic Paxos学习笔记

分布式一致性最强算法之Paxos透析

(16)云计算核心算法之Paxos算法

分布式最强算法之Paxos透析