ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

分布式---Paxos算法

2019-07-05 18:01:23  阅读:346  来源: 互联网

标签:接收 请求 prepare Paxos acceptor 算法 分布式 提议 Acceptor


5.Paxos

  Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景就是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。Paxos算法就是一种基于消息传递模型的一致性算法

主要有三类节点:

  • 提议者(Proposer):提议一个值;
  • 接受者(Acceptor):对每个提议进行投票;
  • 告知者(Learner):被告知投票的结果,不参与投票。

执行过程

  规定一个提议包含两个字段:[n,v],其中n为序号(具有唯一性),v为提议值

1.Prepare阶段

  下图演示了两个proposer和三个acceptor的系中运行该算法的初始过程,每个proposer都会向所有的acceptor发送prepare请求

  当acceptor接受到一个prepare请求,包含的提议为[n1,v1],并且之前还未接受过prepare请求,那么发送一个prepare响应,设置当前接受到的提议为[n1,v1],并且保证以后不会接受序号小于n1的提议

  如下图,Acceptor X 在收到 [n=2, v=8] 的 Prepare 请求时,由于之前没有接收过提议,因此就发送一个 [no previous] 的 Prepare 响应,设置当前接收到的提议为 [n=2, v=8],并且保证以后不会再接受序号小于 2 的提议。其它的 Acceptor 类似。

  如果acceptor接收到一个prepare请求,包含的提议为[n2,v2],并且之前已经接收到提议[n1,v1]。如果n1>n2,那么就该丢弃该提议请求;否则,发送prepare响应,该prepare响应包含之前已经接收过的提议[n1,v1],设置当前接收到的提议为[n2,v2],并且保证以后不会再接收序号小于n2的提议。

  如下图,Acceptor Z 收到 Proposer A 发来的 [n=2, v=8] 的 Prepare 请求,由于之前已经接收过 [n=4, v=5] 的提议,并且 n > 2,因此就抛弃该提议请求;Acceptor X 收到 Proposer B 发来的 [n=4, v=5] 的 Prepare 请求,因为之前接收到的提议为 [n=2, v=8],并且 2 <= 4,因此就发送 [n=2, v=8] 的 Prepare 响应,设置当前接收到的提议为 [n=4, v=5],并且保证以后不会再接受序号小于 4 的提议。Acceptor Y 类似。

2.Accept阶段

  当一个Proposer接收超过一半acceptor的prepare响应时,就可以发送accept请求。

  proposerA接收到两个prepare响应之后,就发送[n=2,v=8]accept请求。该accept请求会被所有acceptor丢弃,因为此时所有acceptor都保证不接受序号小于4的提议。

  Proposer B 过后也收到了两个 Prepare 响应,因此也开始发送 Accept 请求。需要注意的是,Accept 请求的 v 需要取它收到的最大提议编号对应的 v 值,也就是 8。因此它发送 [n=4, v=8] 的 Accept 请求。

3.Learn阶段

  Acceptor接收到Accept请求时,如果序号大于等于该Acceptor承诺的最小序号,那么就发送Learn提议给所有的Learner。当learner发现有大多数acceptor接收了某个提议,那么该提议的提议值就被paxos选择出来

约束条件

1.正确性

  指只有一个提议值会生效

  因为Paxos协议要求每个生效的提议都会被Acceptor接收,并且Acceptor不会接收两个不同的提议,因此可以保证正确性。

2.可终止性

  指最后总会有一个提议生效。

  Paxos协议能够让Proposer发送的提议朝着能被大多数Acceptor接受的那个提议靠拢,因此能保证可终止性。

标签:接收,请求,prepare,Paxos,acceptor,算法,分布式,提议,Acceptor
来源: https://www.cnblogs.com/yjxyy/p/11139855.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有