zoukankan      html  css  js  c++  java
  • 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在此过程中写入 过其他值

  • 相关阅读:
    windows 将常用程序添加到右键菜单中去
    用MediaPlayer播放assets中的音乐文件出现的问题
    android开发技巧
    windows下如何安装java6.0
    ubuntu下运行windows程序wine
    ubuntu系统备份与恢复
    Mongo北京大会3月3号召开!报名抢注火爆进行中!(免费)
    《人月神话》作者Frederick P. Brooks, Jr.大师论设计原本
    HTML 5:富媒体时代的Web内容新规范
    2011年3月华章新书书讯:ASP.NET本质论、Erlang编程指南、SNS网站构建
  • 原文地址:https://www.cnblogs.com/xiongmaotailang/p/5248580.html
Copyright © 2011-2022 走看看