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. sql中group by

    某图书馆收藏有书籍具有不同的出版年份,管理员需要做一下统计工作: (1)每一年书籍的数目,如: 2000年有10本书, 2001年有5本书... (2)每一种书籍的数目,如: 西游记有10本, 三国演 ...

  2. Ubuntu16.04下安装pip

    按照下面的步骤来安装 sudo apt-get install python-setuptools python-dev build-essential 安装python2的pip   (要想好你用p ...

  3. XML 解析 & 特殊字符报错

    在xml文件中,有一些符号是具有特殊意义的,如果直接使用会导致xml解析报错,为了避免错误,我们需要将特殊的字符使用其对应的转义实体进行操作.这些字符如下 <  ==  < >  = ...

  4. mysql踩坑

    com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '****** ...

  5. 【转载】form表单的两种提交方式,submit和button的用法

    1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...

  6. 查看mysql二进制日志报错问题

    在排查网站被黑时想通过Mysql二进制日志找出修改字段时间,但是使用mysqlbinlog报错: [root@zfszsw1 bin]# ./mysqlbinlog /opt/mysql-bin.00 ...

  7. Nginx Location和Rewrite总结

    Nginx 版本:nginx/1.10.3 (Ubuntu) Location 部分: 第一步:创建Nginx 虚拟主机 Nginx 安装成功安装并且可以运行之后,在 /etc/nginx 目录下创建 ...

  8. js总结(四):关于高性能

    参考<高性能网站建设进阶指南> 不仅仅关注页面加载时间,也要关注下页面操作时的相应速度.页面操作是我们写程序中 实实在在需要的 1.使用局部变量 任何非局部变量,在函数中使用次数超过一次时 ...

  9. 大数据学习——mapreduce学习topN问题

    求每一个订单中成交金额最大的那一笔  top1 数据 Order_0000001,Pdt_01,222.8 Order_0000001,Pdt_05,25.8 Order_0000002,Pdt_05 ...

  10. CodeForces 554B--Ohana Cleans Up

    B. Ohana Cleans Up time limit per test 2 seconds memory limit per test 256 megabytes input standard ...