其他分享
首页 > 其他分享> > 细读经典第二期——从Paxos到Zookeeper 分布式一致性原理与实践(2)

细读经典第二期——从Paxos到Zookeeper 分布式一致性原理与实践(2)

作者:互联网

目录

第二章:

2.2 PAXOS

2.2.1基本定理的引出和推导

2.2.2算法的内容


第二章:

2.2 PAXOS

算法可以讲简单,也可以讲复杂,更可以讲专业,我希望你能用专业的话讲简单的事情,所以名词是需要记住的,因为抽象类才是你应该做的事情,PAXOS就是一个新手很容易糊弄的不专业的算法。这里我加入了一些个人的东西,毕竟直接看书是一头雾水的


2.2.1基本定理的引出和推导

我略过了书中算法诞生过程的部分,直接进入正题,算法包含几个角色:

Proposer :提议者     Acceptor:决策者   Learner:最终决策学习者

提案的编号M,提案的内容V,M是递增且唯一的

对于以上模型有几个必须阐明的类似定理的场景:

 

 

 

 你可能会迷惑于上面的字母,不要急,我们先往下走,记住一个前提,我们要达到的是所有Acceptor对于提案内容的一致性状态,这是我们的目标

 对P1很容易想到的一点是,如果多个Proposer持有不同的提案内容V,那么多个Acceptor的状态会产生不一致,这里会引申出一个问题,就是如果提案没有编号M(代表提案顺序),只有提案内容V,那么当V被Acceptor接受,提案V就固定了,你没法辨别提案的顺序,对Acceptor而言,成了无视顺序的盲人,这显然是有问题的。

继续,我们虽然允许Acceptor接受多个编号提案,但是只要提案的内容V一直,那么Acceptor整体表现出来就是一致性,所以才有了P2,P2a实计上是P2的强化,本质上是一个内容

但我们考虑一种情况:

假设总的有5个Acceptor。Proposer2提出[M1,V1]的提案,Acceptor2~5(半数以上)均接受了该提案,于是对于Acceptor2~5和Proposer2来讲,它们都认为V1被选定。Acceptor1刚刚从宕机状态恢复过来(之前Acceptor1没有收到过任何提案),此时Proposer1向Acceptor1发送了[M2,V2]的提案(V2≠V1且M2>M1),对于Acceptor1来讲,这是它收到的第一个提案。根据P1(一个Acceptor必须接受它收到的第一个提案),Acceptor1必须接受该提案!同时Acceptor1认为V2被选定。这就出现了两个问题:

 这就出现了P2b去加强P2a的约束

 至于定理的证明,书里是采用数学归纳法,这里我就不再展开了


2.2.2算法的内容

这里我不再阐述算法的初始和优化,直接给出结果,

经过上面的推导,我们总结下Paxos算法的流程。

Paxos算法分为两个阶段。具体如下:

到此你可能会疑惑,Learner去哪了?别着急,当提案选定以后,Learner就上场了

Learner获取提案有三种方案,这里我盗用一张图,这样会讲的更清楚

算法大致已经讲完了,但是这里再提出一种情况: 

说白了就是没有主Proposer导致Proposer提案无法保证按照合理的顺序提出,当然这里的解决也很简单,只选定一个主Proposer提出提案即可。

以上就是2.2节对于Paxos算法的核心内容

加油!

标签:Zookeeper,细读,Proposer,算法,编号,提案,Paxos,Acceptor1,Acceptor
来源: https://blog.csdn.net/u014783007/article/details/120112974