Paxos Made Practical

当一个组中一台机器提出一个值时,其它成员机器通过PAXOS算法在这个值上达成一致。

Paxos分三个阶段。

第一阶段:

提出者会选出一个提议编号n(n>0,n的低位应当包括提出者的唯一标识。这样两台机器就不会产生同样的编号),然后会向组内其它成员发送信息PREPARE(n)。成员假设已经见到过PREPARE信息大于n,就会拒绝它;假设已经见到的PREPARE信息n‘ < n(这个提议n’的值假设为v‘),就会回复信息PREPARE-RESULT(n’, v’)。假设这个成员还没有见过不论什么提议。就会回复信息PREPARE-RESULT(0, nil)。假设组内大多数成员(majority)都接受了这个PREPARE(n)信息,就进入PAXOS算法的第二阶段。

第二阶段:

It sets v to the value in the highest-numbered prepare-result it received. If v is nil, it selects any value it wishes for v.(没看懂)


接下来提议者会向其它成员广播消息PROPOSE(n。v)。相同,假设成员已经见过的PREPARE(n‘’)(确定是PREPARE而不是PROPOSE)。n‘’ > n。就会拒绝这个消息;否则,就会接受这个消息,并给提议者一个回复。

假设组内多数(包含提议者自己)都接受了这个PROPOSE消息,提议者会广播消息DECIDE(n,v),这就表示这个组在提议的值v上已经达成一致了。

第三阶段哪里去了?


以下是PAXOS算法在实际中是怎样实现的。

先来了解一下什么是状态机(state machine):是一个能接收请求产生回复的可确定性服务(deterministic service),可确定性服务意思是假设两个状态机拥有同样的初始状态。那么当它们接收到同样序列的请求时会产生同样的回复。

首先。我们要清楚一个复制系统(replication system),如Columbia University的M-SMR。会提供两套库,服务器端(server-side)库和client(client-side)库。前者负责状态机的实现,后者是让client发送请求给状态机然后得到回复。

让我们详细看看服务器端(server-side)库提供的三个函数:




这里说一下run函数的第三个參数

buf execute (buf request);

这是状态机里一个非常重要的组成函数。它负责将请求带给状态机并返回回复。

之前我们说过client库负责用户请求的提交和得到回复(这怎么和server端函数run的參数execute函数的功能一致呢?),假如这时有多个用户请求同一时候到来。client库就须要对这些请求达成一个统一的运行顺序让组内成员去运行,来保证一致性。这里就涉及与组内成员的通信问题。client库是怎样来联系组内各个成员的?也许是RPC。


不幸的是并非全部的RPCserver都是确定性的(deterministic)。举个样例,一个文件server会在一个文件发生写操作后将改动时间记录在文件的inode中。这样即使两个成员机器运行同样的文件server程序并运行同样的写请求,可是它们在运行写操作的时间却无法保证同样,比方都是2014/11/14 23:06。

这样就会在成员之间出现分歧状态。为什么你记录的改动时间比我早十分钟?解决方法是让一个机器记录下自己的改动时间,然后广播给大家。告诉大家都来记录这个时间。

事实上这里改动时间就是一个不确定性值(non-deterministic
value)。还是那个问题client库是通过什么手段来联系组内各个成员的?

看来这个问题是无法解答了。解析来切入正题: Normal-case operation


Normal-case Operation

在一个组里,有一个primary。其它的称作backups,这里有一个术语:view,表示一个拥有primary机器的处于活动状态的机器集合。每个view会有一个view-id来唯一标识,并且view-id是单调递增的,随着每一次view的改变。


上图展示了在正常情况(没有机器增加,没有机器故障)下信息的流动。

这里再引入一个术语:viewstamp,由view-id和timestamp结合而来,primary会给每个到来的请求一个timestamp。这个timestamp就指明了请求被运行的顺序。

相同加强版的viewstamp也表示请求的运行顺序。

理解Paxos Made Practical的更多相关文章

  1. 理解 Paxos

    Paxos是前段时间刚获得图灵奖的大神Leslie Lamport所提出的,是用来解决分布式系统中的一致性问题的算法.该算法对于分布式系统的重要性,在这里不再赘言.了解过Paxos的朋友应该都知道,要 ...

  2. 一步一步理解Paxos算法

    一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...

  3. 【分布式协调】之理解paxos

    感叹一下 不得不说近几年国内软件行业发生了巨大的变化,之前几乎所有应用都围绕桌面展开,而近几年很多让人神魂颠倒的关键词一个接一个的映入眼帘:web2.0.移动应用.云计算.大数据.互联网的浪潮一波接着 ...

  4. 通过实例来理解paxos算法

    背景   Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的”La”,此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有 ...

  5. 分布式系统(Distributed System)资料

    这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但 ...

  6. 想从事分布式系统,计算,hadoop等方面,需要哪些基础,推荐哪些书籍?--转自知乎

    作者:廖君链接:https://www.zhihu.com/question/19868791/answer/88873783来源:知乎 分布式系统(Distributed System)资料 < ...

  7. 从事分布式系统,计算,hadoop

    作者:廖君链接:https://www.zhihu.com/question/19868791/answer/88873783来源:知乎 分布式系统(Distributed System)资料 < ...

  8. 分布式理论之一:Paxos算法的通俗理解

    维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...

  9. 四:分布式事务一致性协议paxos通俗理解

    转载地址:http://www.lxway.com/4618606.htm 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La" ...

随机推荐

  1. Firefox--摄像头麦克风权限

    在自动化测试的过程中,可能会遇到来自浏览器的权限提示(摄像头.麦克风),今天,就讨论一下如何结局这个问题. 先来认识一下来自Firefox的权限提示,访问一个需要摄像头或者麦克风的网站 你可能觉得,一 ...

  2. phpstudy里升级mysql版本到5.7

    phpstudy里没有地方可以设置mysql数据库,很多人都疑惑在phpstudy里怎么升级mysql数据库版本,本文就教你如何在phpstudy中升级mysql的版本. PhpStudy集成环境中的 ...

  3. mac rar文件解压缩

    在下载文件时经常遇到RAR格式的压缩文件, 之前从APP Store下载了免费的解压软件, 但是总觉着不好用, 广告信息很多. 好用的软件都要花钱, 所以找到了命令行解决的办法. 步骤如下: 首先需要 ...

  4. ssh服务使用介绍二

    老司机开车了 快上车 上文提到当我们使用ssh远程链接主机的时候,会出现询问的提示,如果我们链接的机器多了,一遍一遍的输入是不是很麻烦?怎么解决如下 vim /etc/ssh/ssh_config 如 ...

  5. django下的framework

    可以创建个虚拟环境先,不过我没使用这个方式 virtualenv env source env/bin/activate ------ 退出: To exit the virtualenv envir ...

  6. 「LibreOJ β Round #3」绯色 IOI(抵达)

    [题解] 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解. 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u ...

  7. Java学习之接口概念

    Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类.但是在实际应用中,又经常需要使用多继承来解决问题.为了解决该问题,Java语言提供接口来实现类的多继承问题. 接口(英文interfa ...

  8. 【CSS】常见问题集锦

    position=absolute 时,定位的父元素变成了body而不是父div?原因:如果父div的position为非static,则相对父div.参考:http://www.jianshu.co ...

  9. POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K   Case Time Limit: 2000MS Description For ...

  10. hdu 1564水题Play a game

    #include<stdio.h> int main() {  int n;  while(scanf("%d",&n),n) {   n=n*n-1;   i ...