Paxos算法理解(分布式系统中一致性问题的共识算法)

Paxos是什么

是用于解决分布式系统中一致性问题的共识算法(Consensus Algorithm)
Paxos要解决的根本问题可以概括为一句话将所有节点都写入同一个值,且被写入后不再更改

Paxos基础

角色

  • Proposers(提议人)

    为达成一致性提出意见,他可以提出议案(value),不同的Proposer可以提出不同的value

  • Acceptors(决策者)

    助于达成一致性,只有超过半数的决策者批准后议案才可以通过

  • Learners(最终决策学习者)

    学习商定后的结果,主要负责将把通过的确定性的值同步给其他不确定的Acceptors

要点

  • Paxos的结点可以扮演多个角色
  • Paxos的结点必须知道大多数的acceptors(超过一半)是多少
  • Paxos的结点必须是持久的,他们不能忘记他们接受的内容
  • 一个Paxos协议是为了获得一个共识,当这个共识被确定时,他就不能再被改变

协议流程

  1. Proposer需要提出一个议案(value),他将发送 PREPARE IDp给大多数的Acceptors
    IDp必须是第一无二的,比如一个时间戳

    例子:
    Proposer1 的ID可以为1,3,5….
    Proposer2 的ID可以为2,4,6….
    如果超时了,就重写选择新(更大)的的ID

  2. Acceptor 将会接受到一个PREPARE信息的IDp,如果IDp比以前接受的ID都要大,那么他将承诺不会接受题以编号比IDp小的提议,并且带上之前Acceptor的提议种小于IDp的最大的提议,否则忽视信息

    设定上一个接受到的ID为IDa
    如果从来没接受到过即IDa=null,将返回PROMISE IDp
    如果IDa!=null,将返回PROMISE IDp ACCEPTED IDa,value

  3. Proposer将会接受到Acceptor的响应
    1. 如果没有接受到超过半数Acceptor的响应,那么提议转为失败
    2. 若接受到了多数Acceptor的响应,又分为以下两种情况
      1. 如果所有的Acceptor的IDa都为null,那么将会向所有的Acceptor发起自己的value和提议的IDp
      2. 如果有部分Acceptor以前接受过value,那么就再所有接受过的value选择IDa最大的作为提议的值,但是此时Proposer就不能提议自己的value,只能信任Acceptor通过的值,且一旦确定就不能改变
  4. Acceptor接受到提议后,如果提议的IDp不等于自身上次接受到的IDp(已存储为自己的IDa),那么就不接受该请求,若相等则写入本地

示例

假设有1个Proposer,3个Acceptor,那么我们可以知道大多数Acceptor也就是2及以上
以下是最简单的一个例子Paxos算法理解(分布式系统中一致性问题的共识算法)_第1张图片

  1. Proposer发出信息PREPARE 5.此时IDp为5
  2. Acceptor发现以前以前变量没有写入并且未收到提议,返回PROMISE 5
  3. Proposer收到3个Acceptor的响应(超过半数),发现他们都没有写入,那么发起写入操作,将value为”cat”
  4. Acceptor收到ACCEPT(5,cat),对比自身的版本号,发现一致,保存成功,并且响应

Paxos算法理解(分布式系统中一致性问题的共识算法)_第2张图片

  • 若在这之后,收到IDp小于IDa的PREPARE请求,比如PREPARE 4,Acceptor将忽略
  • 若IDp更大,比如PREPARE 6,Acceptor将返回储存的小于IDp的最大的IDa以及存储的value,返回PROMISE 6 ACCPET(5,cat),但是这个时候Proposer自己就不能再提议自己的值了,只能信任Acceptor发来的值,且一旦确定就不再改变

你可能感兴趣的:(分布式系统)