• Paxos算法


    解决的问题


    Paxos要解决的问题,是分布式系统中的一致性问题。在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本,这些副本会放置在不同的物理的机器上。为了对用户提供正确的读/写/删/改等语义,我们需要保证这些放置在不同物理机器上的副本是一致

    image

    如上图所示,Client会将数据写到三个不同的Server上,如何保证写在这三个不同Server上的数据是一致的,这便是Paxos要解决的问题。 对上述问题进一步抽象,我们假设Replica A的初始状态是S0, 然后用户一次操作称为一个OP, 那么任意时刻,Replica A的状态Sn,都是在S0的基础,执行一系列操作{OP1, OP2, …, OPn}的结果,即:
    Sn = S0 + {OP1, OP2, ..., OPn}
    由于client与server、server与server之间是用网络连接的,则由网络协议带来的不可靠、不确定性将会影响这三个server到达一个一致状态。

    过程

    过程涉及2个阶段

    image

    当Acceptor收到phase-1的请求时:
    ● 如果请求中rnd比Acceptor的last_rnd小,则拒绝请求
    ● 将请求中的rnd保存到本地的last_rnd.
        从此这个Acceptor只接受带有这个last_rnd的phase-2请求。
    ● 返回应答,带上自己之前的last_rnd和之前已接受的v.
    当Proposer收到Acceptor发回的应答:
    ● 如果应答中的last_rnd大于发出的rnd: 退出.
    ● 从所有应答中选择vrnd最大的v: 不能改变(可能)已经确定的值
    ● 如果所有应答的v都是空,可以选择自己要写入v.
    ● 如果应答不够多数派,退出
    image

    Proposer:
       收到的回应个数有没有超过N/2。如果没有超过,那么此轮结束,proposer重新提议
       发送phase-2,带上rnd和上一步决定的v
    Acceptor:
    ● 拒绝rnd不等于Acceptor的last_rnd的请求
    ● 将phase-2请求中的v写入本地,记此v为‘已接受的值’
    ● last_rnd==rnd 保证没有其他Proposer在此过程中写入 过其他值

  • 相关阅读:
    SX知识学习——sources
    SX知识学习——TCGA(转)
    SX知识学习——WES(转)
    SX知识学习——CHIPseq(转+总结)
    编译软件安装——VS2010
    数据库知识学习——mysql
    计算机知识学习——操作系统
    计算机知识学习——计算机组成原理
    Scrapy 中文手册 0.25 文档
    python Requests 库
  • 原文地址:https://www.cnblogs.com/xiongmaotailang/p/5248580.html
Copyright © 2020-2023  润新知