首页 > 编程知识 正文

kawpow算法,paxos算法验证

时间:2023-05-03 20:30:06 阅读:152469 作者:3336

前言

文章2PC/3PC是什么,介绍了2PC这一连贯性协议,发现2PC多用于状态的连贯性(分布式事务),在数据的连贯性中很少使用; Paxos在数据一致性中被广泛使用,过去十年来,Paxos基本上成为分布式领域内一致性协议的代名词。 谷歌粗粒度锁服务Chubby的设计开发者Burrows曾说:“所有的一致性协议本质上是Pax操作系统或其变体。” Paxos的倡导者zxdhb也因其对分布式系统的卓越理论贡献而获得了2013年图灵奖。

在介绍Paxos之前,我先介绍一下数据的完整性是在什么场合使用的。 以下用复制状态机表示

副本状态机

在分布式环境中,一致性协议的应用场景一般由副本状态机表示,这是对各种不同应用场景的抽象表示。

实现典型复制状态机的机制之一是采用Log复制方式,如下图所示。

集群内的多个服务器分别维护着一个Log副本和内部状态机,Log内依次记录来自客户端的操作命令,服务器依次执行Log内的命令并反映到内部状态机,各机器内的Log副本内容完全一致

一致性协议的作用就是保证各个Log副本数据的一致性,上图中的一致性模块就是用来保证一致性的。

再看一个具体的例子吧。 在分布式数据库系统中,每个节点的初始状态一致,当每个节点执行相同的操作序列时,最终得到一致的状态。 为了使每个节点执行相同的命令序列,每个命令都必须运行一致性算法,以确保每个节点上显示的命令一致。

民主选举算法

也许可以考虑先提供单个唯一的一致性模块,以通过类似2PC的方式来确保每个Log拷贝数据的一致性,或实现这个一致性模块,但2PC方法会导致一致性模块崩溃或瓶颈

本论文介绍的Paxos一致性协议是在有可能发生多次停机或网络异常的分布式系统中,使某个数据的值迅速且正确地在集群内部一致,并且无论发生哪一个异常都不损害系统整体的一致性主要原因还是Paxos提供群集一致性组,民主选举算法——的大多数决策导致整个群集的统一决策。 可以提出修改任何一点的数据的方案。 是否通过此建议取决于此群集中半数以上的节点是否同意。 因此,Paxos算法要求群集中的节点是单数的。)。

当然这个保证是有前提的。 这就是接下来介绍的拜占庭问题。

拜占庭问题

其背景是拜占庭位于现在的土耳其伊斯坦布尔,是东罗马帝国的首都。 当时拜占庭罗马帝国国土辽阔,出于防御目的,各军相距遥远,将军与将军之间只能通过书信传递信息。 战争时期,拜占庭军队内的所有将军必须达成一致共识,决定是否有机会获胜并攻击敌人的阵营。 但是军队里可能有xldy和敌军间谍。 这些xldy将军们会混乱和左右决策的过程。 此时,如果知道成员谋反,剩下的忠诚将军如何达成协议而不受xldy的影响,这就是拜占庭将军问题。

理论上,在分布式计算领域,异步系统和不可信信道不可能达到一致性,所以一致性的研究往往假设信道是可信的,即没有拜占庭问题。

拜占庭模式以外的定义:

1 .一致性模块的运行可以以任意速度运行,允许运行失败,失败后可能重新启动并重新运行

2 .在一致性组之间以异步方式发送信息的通信可以任意延长通信时间,信息可能在传输期间丢失,并且可以重复发送相同的信息,复用信息的顺序是任意的。 但有一点:不允许篡改信息。

Paxos的基本概念

首先是与复制状态机上每台服务器的一致性组相对应的并行进程角色的概念。 Paxos协议下不同并行进程可以承担的三个角色是:

提案者(Proposer ) :提案者可以为了投票而提出提案(数值和操作命令等)

接受方(Acceptor )接受方可以对提案方提出的提案进行投票,并从众多提案中选择唯一确定的一个。

学习者(Learner ) )学习者虽然没有提案投票权,但可以从接受者那里知道哪个提案是最终选择的

在一致性协议框架中,一个并行进程可以同时承担这些角色。

划分角色可以更准确地定义问题。

1 .决议(value )只有在由proposers提交后才批准(未经批准的决议称为"提案" proposal ) );

2 .一个Paxos算法的执行示例,只接受一个Value;

3.Learner只能获得批准的值。

Paxos一致性协议

Paxos的目的是在拜占庭以外的条件下,当多个并行进程提出不同的提案时,如何达成一致。 概括Paxos协议可以描述为以下两个阶段的过程:

阶段一:Prepare阶段


1.1【倡议者视角】倡议者选择倡议编号n,然后向大多数(即超过半数以上)接受者发送Prepare请求,请求中附带倡议编号n。
1.2【接受者视角】对于某个接受者来说,如果接收到带有倡议编号n的Prepare请求,则做如下判断:若倡议编号n比此接受者之前响应过的任何其它Prepare请求附带的倡议编号都大,那么此接受者会给倡议者以响应,并承诺不会响应之后接收到的其它任何倡议编号jsdxy的请求,另外,如果接受者曾经响应过2.2阶段的Accept请求,则将所有响应的Accept请求中倡议编号最高的倡议内容发送给倡议者,倡议内容包括两项信息:Accept请求中的倡议编号以及其倡议值。若倡议编号n不比此接受者之前响应过的任何其它Prepare请求附带的倡议编号都大,那么此接受者不会给倡议者以响应。

阶段二:Accept阶段
2.1【倡议者视角】如果倡议者接收到大多数接受者关于带有倡议编号n的Prepare请求的响应,那么倡议者向这些接受者发送Accept请求,Accept请求附带两个信息:倡议编号n以及倡议值v。倡议值v的选择方式如下:如果在1.2阶段接受者返回了自己曾经接受的具有最高倡议编号Accept请求倡议内容,则从这些倡议内容里面选择倡议编号最高的并将其倡议值作为倡议值v;如果1.2阶段没有收到任何接受者的Accept请求倡议内容,则可以任意赋值给倡议值v。

2.2【接受者视角】如果接受者接收到了任意倡议编号为n的Accept请求,则接受者接受此请求,除非在此期间接受者响应过具有比n更高编号的Prepare请求。通过以上两阶段过程即可选出唯一的倡议值,对于学习者来说,其需要从接受者那里获知到底是哪个倡议值被选出。一个直观的方法如下:每当接受者执行完2.2步骤,即接受某个Accept请求后,由其通知所有学习者其所接受的倡议,这样,学习者很快习得是哪个倡议被最终选出。但是这种方式会导致大量通信,因为任意一个接受者会通知任意一个学习者,如果有m个接受者,n个学习者,则需要m*n次通信。一个替代策略是:从众多学习者中选择一个作为代表,由其从接受者那里获知最终被选出的倡议,然后再由其通知其它学习者,这样可以将通信量降为m+n。但是这个方案中如果这个学习者代表发生故障,其它学习者无从知晓倡议值。考虑到健壮性和通信量两个因素,可以采取折中方法:选出若干学习者作为代表,由这些代表从接受者那里获知最终倡议值,然后通知其它学习者。

通过以上流程,如果有多个并发进程提出各自的倡议值,Paxos就可以保证从中选出且只选出一个唯一确定的倡议值,以此来达到副本状态机保持状态一致的目标。

总结

此文只是对Paxos的应用场景以及Paxos协议本身进行了介绍,而Paxos最难理解性在于是什么因素导致协议以此种方式呈现以及其正确性证明过程而非最终协议本身内容。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。