zoukankan      html  css  js  c++  java
  • Paxos共识算法

    Paxos共识算法


    paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果。由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程。

    paxos算法的假定

    Processors(可理解为节点)

    • Processor以任意速度运行
    • Processor可能会出错
    • Processor失败失败后会重新配置恢复到网络中
    • Processor不会撒谎或者是违反协议,即不会发生拜占庭错误

    Network

    • 一个节点可以给任何其他节点发送消息
    • 消息可以被异步发送,传输过程可以花费任意时间
    • 消息可能会丢失、重复或者是顺序错乱
    • 消息在传输过程中不会被篡改、破坏,即不发生拜占庭错误

    节点数量

    一般情况下,共识算法用(2f+1)各节点,以保证(f)个节点发生错误时,系统依然可以正常运作。

    Roles(角色)

    Paxos算法中根据不同节点的行为将其分为不同的角色:client、proposer、acceptor、learner、leader。在算法实现中,一个节点可以承担一个或多个角色。

    • Client

      Client向分布式系统发起一个请求,并等待回应。比如,在分布式文件系统中,发起一个写文件的请求。

    • Acceptor

      Acceptor被分成组(Quorum),每个组中包含大多数的Acceptor。任何发送给某个acceptor的消息,都必须给组内的任意节点都发该消息。如果一个acceptor收到一个消息,但是该消息的副本没有发送给组内所有的acceptor,那么该消息将会被忽略。

    • Proposer

      提出一个倡议的值,并试图让acceptor在该值达成一致,当出现冲突时,会承担一个协调者的角色

    • Learned

      当达成一致时,动作的执行者。当一个client的请求,被acceptor一致接收,那么learner会执行该请求,并返回。

    • Leader

      一个卓越的Proposer用来推进达成共识的过程。很多节点都可能认为他们自己是leader。

    Quorums

    理解为一个组,这个组里包括了大多数(超过半数)的acceptor,这样任何两个Quorum都会至少有一个共同的节点。比方说,节点{A,B,C,D}中,然和三个节点都可以组成一个Quorum。可以给每个节点一个权重,一个Quorum中所有节点的权重之和大于50%。

    Basic Paxos

    共识的过程一般是这样的,client向分布式系统发起一个请求,然后proposer将该请求(proposal)发送给acceptor,当取得一致时候,learner来执行请求。

    Proposal的形式是这样的,用一个整数N表示其ID,每个节点发出的proposal的ID是不断增大的,然后proposal的提议值用value表示。

    共识过程的建立有以下四个步骤完成

    1. Prepare

    Proposer先将proposal的ID(用N表示)发送给一个Quorum的acceptor(即发送给大多数节点)。

    2. Promise

    Acceptor收到Prepare消息,如果消息中的N是目前为止收到的最大的值,那么就会返回一个Promise消息。如果之前有收到更大的N值,那么本次收到的Prepare消息便被忽略。如果本Acceptor节点之前有接受的proposal,那么会在返回的promise消息上,加上之前已接收的proposal的N与value值。

    3. Accept Request

    如果Proposer收到足够多的promise,那么就需要给该proposal设置value值。如果在收到的promise消息中,有已经被Acceptor接受的proposal,那么会从中选出N值最大的proposal,并用其中的value值设置本次proposal。

    然后proposer给一个Quorum的Acceptor发送“Accept Request”消息,消息中包含了本次proposal的ID及value。

    4. Accepted

    当一个Acceptor收到一个“Accept Request”消息时,只要改accept还没有promise更大的ID的proposal,那么就必须接受该proposal。注册该proposal的Value值,发送一个Accepted消息给Proposer和每一个Learner。

    需要注意的是,Acceptor可以接受proposal,这些proposal可能有着不一样的value值。但是,Paxos协议可以保证最终只会在一个值上达成一致。

    Paxos过程的消息流程如下图所示:

    Client   Proposer      Acceptor     Learner
       |         |          |  |  |       |  |
       X-------->|          |  |  |       |  |  Request
       |         X--------->|->|->|       |  |  Prepare(1)
       |         |<---------X--X--X       |  |  Promise(1,{Va,Vb,Vc})
       |         X--------->|->|->|       |  |  Accept!(1,Vn)
       |         |<---------X--X--X------>|->|  Accepted(1,Vn)
       |<---------------------------------X--X  Response
       |         |          |  |  |       |  |
    
  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/gexin/p/9238373.html
Copyright © 2011-2022 走看看