收藏 分享(赏)

The Part-Time Parliament(Paxos算法中文翻译).pdf

上传人:精品资料 文档编号:9661503 上传时间:2019-08-21 格式:PDF 页数:24 大小:1.04MB
下载 相关 举报
The Part-Time Parliament(Paxos算法中文翻译).pdf_第1页
第1页 / 共24页
The Part-Time Parliament(Paxos算法中文翻译).pdf_第2页
第2页 / 共24页
The Part-Time Parliament(Paxos算法中文翻译).pdf_第3页
第3页 / 共24页
The Part-Time Parliament(Paxos算法中文翻译).pdf_第4页
第4页 / 共24页
The Part-Time Parliament(Paxos算法中文翻译).pdf_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、 The Part-Time Parliament 1 The Part-Time Parliament 兼职议会 Leslie Lamport 1. The Problem 2 1.1. Paxos 岛 . 2 1.2. 要求 (Requirements). 3 1.3. 假设( Assumptions) . 4 2. The Single-Decree Synod . 4 2.1. 数学结论 5 2.2. 初级协议( The Preliminary Protocol) 9 2.3. 基本协议( The Basic Protocol) 11 2.4. 完整的神会协议( The Complet

2、e Synod Protocol) 12 3. The Multi-Decree Parliament 14 3.1. 协议 14 3.2. 协议特性 (Properties of the Protocol) . 15 3.2.1 法令的顺序 15 3.2.2 关上门之后 15 3.3. 更进一步 (Further Development) 16 3.3.1 选择一个总统 . 16 3.3.2 长律簿 . 16 3.3.3 官员化 . 17 3.3.4 法律的学习 . 18 3.3.5 不诚实的议员和无心之过 19 3.3.6 选择新的议员 20 4. 与计算机科学的关系 . 21 4.1.

3、状态机模式 (The State Machine Approach) 21 4.2. 提交协议 (Commit Protocols) 22 5. 附录:神会协议一致性的证明 . 23 6. 翻译后记 . 24 The Part-Time Parliament 2 The Part-Time Parliament (兼职议会 ) Leslie Lamport 这篇论文前不久在 TOCS 编辑室的档案柜后面被发现。尽管年代久远,主要作者仍然认为它值得发表。因为作者最近在希腊的一些小岛上做野外作业不能到达,所以请求我来准备它。 作者貌似是个只业余 对计算机科学感兴趣的考古学家。这非常不幸;尽管他描述

4、的模糊的古代 Paxos文明对于大多数计算机科学家不感兴趣,但它的议会系统对于怎样在异步环境中实现一个分布式计算系统来说是个杰出的模式。 Paxos 人对他们协议的一些改良貌似在系统的文 献中确实找不到。 作者在第 4 节中确实简短讨论了 Paxos 议会和分布式计算的关系。计算机科学家可能会想要首先阅读这一节。甚至在这 之 前,他们或许想要阅读 Lampson1996对这个算法向计算机科学家作的解释。这个算法也在 1997被 De Prisco 更正式的描述过。我在第 4 节的末尾加上了古代协议和近期研究之间关系的更进一步说明。 1. The Problem 1.1. Paxos 岛 在这个

5、千 年的早期 (公元 10 世纪 初 ) ,爱琴海上的小岛 Paxos 是一个兴盛的商业贸易中心 (这应该不会和 爱奥尼亚的 的 Paxoi 岛混淆, Poxoi 有时也被破读为 Paxos) 。 经济发展带来了政治的进步。 Paxos 的公民们用议会 形式的政府取代了原先的神权 统治 。 但是对 Paxos 人来说,做生意才是头等大事, 城市职责反在其次 , 没有 Paxos 人愿意把他全部的时间投入到议会事务中。 所以 Paxos 的议会必须在每个议员都 可能 随时 缺席的情况下也能工作下去。 兼职议会 所 面对的问题 正好能对应于 今天的容错式分布式系统所面对的问题 : 议员对应 于 分

6、布式系统中的处理进程 (processes),而议员的缺席对应于 处理进程的 宕机 。 因此 Paxos 人的解决方法或许值得计算机科学 借鉴。 我 这里会介绍 Paxos 议会协议的一个简短历史,接下来会简短讨论一下其与分布式系统的相关性。 Paxos 文明已毁灭于一次异族入侵,考古学家只是最近才开始发掘他们的历史。 我们对于Paxos 议会的所知因此比较零 散 。 虽然基本协议 是知道的,但对许多细节 我们 却一无所知,而这正是我们感兴趣的地方,因此我将 忝为 推 测 Paxos 人在这些 具体 细节上可能的做法。 The Part-Time Parliament 3 1.2. 要求 (R

7、equirements) 议会的主要任务就是决定这片土地上的法律,法律是由议会通过的一系列法令定义的 。 一个现代的议会可以 雇佣秘书来记录它的每一个活动 , 但是在 Paxos 没有一个人愿意始终呆在议会大厅里 作为 一个 秘书从头到尾参与 每一个会议。 取而代之的是每一个议员都会维护一个 律簿 ( ledger), 用来记录 一系列 已 通过的 法令 ,每个法令会带 有一个 编号 。 例如议员 (译者注:由于古希腊字母比较难输入,原文中的希腊文姓名统一用其中的一个字母代替 )的 律簿里有这样一个条目: 155:橄榄税是每吨 3 个银币 如果她相信议会通过的第 155 号法令 设置 了 橄榄

8、 的赋 税 为每吨 3 个银币。 律簿 是由檫不掉的墨水书写的,所以其中的条目不能 被改变。 议会协议的第一个需求就是 律簿 的一致性。 也就是任何两个 律 簿 都不能有互相矛盾的内容。假设议员 在他的 律簿 中有这样一个条目: 132:只有橄榄油可以用来做灯 那么就不会有其他议员 的 律簿 会 记录 不同内容的 第 132 号 法令 。当然,另一个议员的 律簿 里可能还没有 第 132 号法令 的记录 ,如果他还不知道第 132 号法令已经通过了。 仅仅有 律簿 的一致性( Consistency)还不够, 因为让每个 律簿 都保留 空白 也 能 满足 一致性 。所以需要一些要求 ( Req

9、uirement) 来保证法令 能最终 通过并被记录在 律簿 中 。在现代的议会中,议员达不成一致妨碍了法令的通过。但是在 Paxon 不是这种状况,这 里 盛行的是相互信任的气氛,议员愿意通过任何被提交的法令 。 但是他们好游历的特性却造成了问题。假如一组议员通过了 37 号法令: 37:禁止在圣殿的墙上种植 然 后离开议会厅参加宴会去了,接下来另外一组议员进来议会厅,不知道刚刚发生了什么事情,然后也通过了一个冲突的 37 号法令: 37:允许自由的艺术表达 那么一致性 就失去 了 除非足够多的议员在议会厅 里 呆足够长的时间,否则进展 性 (Progress)无法保证。 因为 Paxos的

10、议员不愿意缩减他们在外面的活动,所以 无法保证 任何法令都会最终被通过。 但是无论如何,议员们 愿意保证,只要他们在议会厅中,他们和他们的助手就会快速的处理所有的议会事务。 这个保证使 Paxos 公民们能够设计出一个满足如下进展 性 条件( Progress Conditon)的议会协议: The Part-Time Parliament 4 如果议员中的多数 在翻译进展条件时,我将 Paxos 的单词 翻译为议员中的多数。 2.2 节中提出了另一个可取的翻译,并做了讨论 都在议会厅中,并且在一个足够长的时间内没有人进出议会厅,那么任一被某个议员提议的法令都将会被通过,并且每一个被通过的法令

11、都会出现在议会厅中每个议员的 律簿 上 1.3. 假设 ( Assumptions) 通 过 提供给议员必要的资源, 议会协议的要求 (requirements)是 可以达到 的 。 每个议员 收 到了 一个结实耐用的 律簿 来记录法令,一支笔,和擦不掉墨水。议员如果离开过议会厅,可能会在回来后忘记了他们曾经做过什么 ( (比如) 在一个悲剧的事故里,议员 Twvey 被掉下来的雕像击中了头部而永久失忆了 = =! ) ,所以他们会把一些重要的议会任务记在 律簿 的背面。 律 簿上的法令条目永远不会改变,但是律簿背面的 备注 (notes)可能会被划掉。 进展条件的达成要求 议员 能够度量时间

12、的流逝,所以给 了 他们简单的沙漏计时器 。 议 员任何时候 都会带着他们的律簿, 并且总是能够从律簿上阅读到法令条目和尚未划掉的 备注。律簿由最精良的羊皮纸做成,只 用来 记录 最 重要的备注 (notes)。 其他备注会被记录到小纸条 (a slip of paper)上,这些小纸条可能会在 议员离开议会厅后丢失。 议会 厅里比较嘈杂,影响听觉,不可能在里面做演讲 。议员只能通过信使来通信, 并且 有专款来供议员 雇用任意 多 他们 需要 的信使。 信使不会篡改消息,但是他可能 会 忘记他递 送 过了某个消息,并再次递送它。 像他们服务的议员一样,信使也只花他们部分的时间在议会职责上。一个

13、信使在投递一个消息前可 能会离开议会厅去从事其他的事情,比如一次为期 6 个月的航海 。 他甚至可能 会 一去不复返,在这种情况下消息永远也不会被送达。 尽管议员和信使可以随时离开或进入, 但是只要他们在议会厅 里 ,他们就会专注于议会事务。只要 呆在议会厅 ,信使会很快速的投递消息,议员 会立即快速的处理任何他们收到的消息。 Paxos 的官方记录声称议员和信使绝对的诚实并 严格遵循 议会协议。 大多数学者仅仅把这当做将 Paxos 描绘为在道德上优越于其东方邻国的宣传 。不诚实,尽管稀少,但毫无疑问一定是存在的,但由于官方文本里从未提及, 我们也不知道议会是怎样 应付不诚实的议员或信使的。

14、 在 3.3.5 节讨论了已经发现的迹象 2. The Single-Decree Synod Paxos 议会由更早期的牧师的 宗教仪式会议 ( Synod,以下简称神会 )演化而来。 这种 神会 每19 年 召集 一次来选择一个象征性的法令 。 几个世纪以来, 神会 约定俗成 地要求所有牧师都到场 来选择一个法令 。 但是随着商业的繁荣,牧师开始在 神会 期间 就进进出出会议厅,最后旧的协议失效 了,一个 神会 没有达成任何法令就结束了。 为了避免重复这种宗教上的灾难,Paxos 的宗教领袖请求数学家制定一个协议来达成 神会 法令。 协议的要求和假 定本质上与后来的议会协议是 一样的, 除

15、了 一点不同: 神会 只允许 在律簿上 包含 一条法令,而 后来的 议会 The Part-Time Parliament 5 可以 包含一系列法令 。 神会协议 在本章中描述,议会协议在第三章中描述。 数学家通过几个步骤来得到神会协议 。首先他们证明了一个满足特定约束的协议能够保证一致性, 并且可以进展下去 。 由这些约束直接得出了一个 初级 协议。 初级 协议的一个 约束 版本提供了能够保证一致性,但是不能保证 进展 性的基本协议 ( basic protocol) 。 通过进一步约束基本协议 得到了 能够满足一致性和进展 性 要求 的 完整 神会协议 (synod protocol) 神

16、 会协议的完整的发现历史已不可考。就像现代的计算机科学家, Paxos 的数学家将描述优美的逻辑推演, 描述 毫不相干的算 法 是如何 推演产生的。 我们知道数学结论( 2.1 节的定理 1 和 2)确实 是 在协议产生之前作出 的 。 当 数学家 在 回复关于 协议的请求 ,试图 证明 不可能有一个 满足要求的协议 时,发现了这些数学结论 2.1 节描述了这些数学结论 。 2.2-2.4 节非正式地描述了这些协议。 在附录中给出了 基本协议的更正式的描述 和正确性证明。 2.1. 数学结论 神会法令从 多 轮 带编号 的 表决 (ballot)中选择。 一 轮 表决是对 一个 单条法令的投票

17、。 在每 次 表决中,牧师只有两种选择: 对这个法令投票 ( 表示 赞成这个法令 ) ,或 不投票( 不赞成 ) 像许多现代国家一样, Paxos 并没有完全领会古希腊民主的精髓 。 与一 轮 表决相关 联 的是一个牧师的集合,称为 法定人数集 ( quorum) 。 当且仅当 法定人数集 中的每个牧师都 赞成这个法令时 , 这 轮 表决 才是成功的。 正式的表述是,一轮 表决 由下面 4 个要素组成:(除非特别说明,集合指有限集合) 一条法令(被投票的那条 decree) 一个牧师的非空集合( 表决 的 法定人数集 quorum) 一个牧 师的集合(所有对法令作出投票 (赞成) 的牧师) 这

18、轮 表决的编号 说 一轮 表决 是 成功的,当且仅当 qrm vot,所以一轮成功的投票是 每一个 法定人数集 的成员都投了票 的 (赞成票,不赞成则不投票 )。 表决的编号 从一个无界 有序 的 数字集合中选取。 如果 , 则说 比 B 大 。但这并不能表明 表决进行的顺序。 一个大的 表决实际上 可以 在一个小 的 表决之前发生。 (这里故意将 later 翻译成了大,省得 later 和 before 掺杂不清) Paxos 的数学家在一个 由 多 轮 表决 构成 的集合 上定义了 3 个条件,然后展示了如果已 经进行过的 表决满足这些条件,那么一致性会得到保证,进行性也是 可能 的 。

19、 头两个条件比较简单,可以被非正式的描述如下: B1( ): 中的每一轮 表决 , 都 有一个唯一的 编号 B2( ): 中任意两轮表决 的 法定人数集 中, 至少有一个公共的牧师成员 The Part-Time Parliament 6 第三个条件更复杂一些。在一个 Paxos 人的手稿中包含了如下内容,比较绕,描述了这个条件: B3( ):对于 中每一 轮表决 ,如果的 法定人数集 中的任何一个牧师在 中一个更小轮的 表决 中投过 (赞成 )票,那么的 法令与所有这些更小轮 表决 中的最大的那 次 表决 的法令相同 图 1 的手稿帮助 诠释了这一段隐晦 的文本。 手稿画出了 5 个牧师 A

20、、 B、 、 和 E 的 5 轮投票 来阐明 条件 B3( )的含义 。 5 轮 表决组成了集合 ,对于其中的每轮 表决 ,投了票的牧师集合是 定额集合 牧师的子集 ,投了票的牧师被方框圈起来。 例如,第 14 轮表决的法令是 ,定额集合包含 3 位牧师和两个投票者。条件 B3( )有这样的形式:“对于中 的每一个 B: .”, 这里“ ”是一个限制在 表决 B 上 的条件。 图 1 中 5 个表决的条件描述如下: # 法令 法定人数集和投票 2 缺席 5 缺席 14 缺席 缺席 27 缺席 缺席 29 缺席 缺席 图 1: Paxos 手稿展示了五轮表决组成的集合 ,满足条件 B1( )-

21、B3( )(加上了说明性的列头) 2 编号为 2 的表决是最小(早)的表决,从而这轮投票的条件也都满足 5 编号为 5 的表决中没有牧师在更小号的投票中投过票,所以这轮的条件也平凡的满足 14 这轮表决的定额集合中, 唯一一个在更小编号的表决中投过票的牧师 是 ,他在编号为2 的表决中投了票,所以要求这轮的法令和 2 的法令必须相等(成立) 27(这是一次成功的表决) 27 轮表决的定额集合是 A、 、 。牧师 A 没有在 更小号的表决中投过票。 投过票的小编号表决只有 5, 投过票的小编号表决只有 2;这两个更小编号表决中最大的是 5,所以条件要求本轮的 法令和 5 的法令相同。 (成立)

22、29本论的定额集合是 B、 、 。 B 投过票的小编号表决只有 14, 是 5 和 27, 是 2 和 27。这 4 个小编号表决中最大的一个是 27,所以条件要求 29 的法令和 27 的法令相同 正式的表述 B1( )- B3( )需要更多的符号标记。 我们用符号 v 表示 一个投票,那么 v 包含 3个组成部分: 投票的 牧师 ,本论 表决 的编号 ,和所 表决 的 法令 。 Paxos 人同时定义了 = -, =BLANK 的投票 v 为 null 投票。 对于 - 同时 ,如果B1( )、 B2( ) 和 B3( )条件 成立 ,那么存在一轮表决 , 同时 使得 也 满足 B1( )

23、、 B2( ) 和 B3( )这 3 个条件 (也就是总能找到保持 3个条件被满足的表决 ,以使程序进行 下去) 定理的证明 : B1( )、 的选择,和 b 的假定可以得出 B1( )。 B2( )、 的选择和 Q 的假设可以得出 B2( )。如果 则 让 等于任意法令,否则让 等于 The Part-Time Parliament 9 ,然后加上 B3( ), B3( )得以成立 定理证明结束 2.2. 初级 协议( The Preliminary Protocol) Paxos 人 在要求 B1( )- B3( )条件保持满足的基础上推演出了 初级协议 , 是 已经完成或将要完成的所有

24、表决 的集合。 协议的定义详细描述了集合 是 怎样变化 的 ,但 这个 集合 却 从来没有被显式的计算过 (大小 )。 Paxos 把 (的大小)认为是一个只有上帝才知道的数量, 可能永远不会有任何凡人知道它。 每一轮 表决 都由一 个 牧师 发起 。 牧师 选择表决的编号,法令和定额集合。 然后定额集合中的每个 牧师 决定是否在本轮表决中投票 (投赞成票 )。 我们 可以由保持 B1( )- B3( )条件的要求直接得出 应该用什么样的规则规定 发起者怎样 选择 表决 的编号,法令和定额集合,以及 牧师怎样 投票 。 为了使 B1 成立,每一轮 表决 都必须获得一个唯一的编号。 通过记住 (

25、在律簿上记录备注)他之前发起过的表决, 一个 牧师 可以很容易的避免发起两个编号相同的表决。 每个 牧师 使用不同集合的表决编号 ,例如,可以简单的用 牧师 的名称 和一个数字 组成表决标号,以 字典顺序 为 序 : ( 13, a) (13,b)(15,a) 因为在 paxos 字典中 a 比 b 小所有有上面的顺序。 在任何情况下,每个 牧师 都有 一个 无限的表决编号集合 单独 供自己使用。 为了使 B2 成立, 表决的 法定人数集 被选定为集合 M,开始 M 只是简单的包含多数 牧师 就可以了。 过了些时候,发现胖的 牧师 比瘦的更少 行动,并且会花 更多的时间在议会厅中。 因此M 被

26、定义为任何包含总体重大于所有 牧师 总体重一半以上的 牧师 集合 ,而不是一个简单的多数。 当一些瘦的 牧师 抱怨这样不公平时,实际的体重被 基于 牧 师 们 出勤记录 的抽象体重 取代。 M 的主要要求是任意两个包含 M 的子集至少包含一个相同的 牧师 。 为了保持 B2 成立,牧师 发起一个表决 B,选择 作为多数集合 。 条件 B3 要求如果 不为空集,那么编号为 b, 法定人数集 为 Q 的表决, 表决 法令必须为 ;如果 为空集,那么表决 法令 可以是任意法令 。为了保证 B3( )成立, 一个 牧师 p 在发起表决前,需要找出 ,为了找出 , p 需要对 Q 中的每一个 q 找出

27、。 回顾一下, MaxVote(b,p, )是 Votes( )中由 p 投出的表决编号小于 b( b)的最大的投票 v 或者空投票 ( todo), 如果 q 在小于 b 的所有表决中都没有投票。 牧师 p 通过一些消息交换从 p 处知道 MaxVote(b,p, )。因此为了构建由 p 发起的 单 一轮投票,头两步 应该 是: ( 1) 牧师 p 选择一个新的 表决 编号 b,发送一条 NextBallot(b)消息给某些 牧师 。 ( 2) 牧师 q 响应消息 NextBallot(b),发送 LastVote(b,v)给 p, v 是 p 的 编号小于 b 的 表决中 编号 最大 的

28、表决的 投票 , 或者 如果 p 没有在任何编号小于 b 的投票中表决过,则为 The Part-Time Parliament 10 当 q 发送 LastVote(b,v)时, v 等于 ,但是新表决的发起和投票的进行会改变集合 。 因为 当选择法令时, 牧师 p 将会使用 v 作为 的值, 为了保持 B3( )成立,务必要使 在 q 发送 LastVote(b,v) 消息 后不再改变。 为了 让保持不变, q 必须在编号介于 和 b 之间的表决中不再投票。 通过发送LastVote(b,v)消息, q 将 承诺 不进行 任何 这样的投票。 (为了保证这个承诺, q 必须 在他的律簿中记录

29、一些必要的信息) 。在表决协议中接下来的两个步骤是: ( 3) 在收到某个过半集合 Q 中所有 牧师 的 LastVote(b,v)消息后, 牧师 p 发起一个编号为 b,定额集合为 Q,法令为 d 的新表决。 法令 d 的选择满足条件 B3( )。接着他在他的律簿背面记下这个表决,然后 给 Q 中的每一个 牧师 发送 BeginBallot(b,d)消息。 ( 4) 在收到 BeginBallot(b,d)消息后, 牧师 q 决定要不要 对这个 编号为 b 的 表决 投出他的一票。 (如果 他已经在其他表决中发送了 LastVote(b1,v1)消息,而 投这一票会违背 这个消息 隐含的承诺

30、,那么他不会投出这一票 ) ( 直译: 他可能会因为这样做会违背他已经在其他表决中发送的 LastVote(b1,v1)消息 隐含的承诺而不会投 这一 票) 如果 q决定为表决 b 投票,那么他发送一个 Voted(b,q)消息给 p 然后在他律簿背面记录下这个投票。 步骤 (3)的执行可以认为是将一个表决 B 加入到集合 中, 其中 =b, =Q, = (还没有人在这轮表决中投票) , =d。在步骤 (4)中,如果 牧师 q 决定在表决中投票,那么执行这一步骤可以认为是通过将 q 加入到 B 的 投票者 集合 中来改变了表决集合 , 这里 B 一个 牧师 有在步骤 (4)中不投票的选择,即使

31、投了这票不会违背任何之前的承诺。 事实上这个协议中的所有步骤都是可选的。 例如, 一个 牧师 q 可以忽略 NextBallot(b)消息 ,不执行步骤 (2)。 采取某个动作失败会阻止流程的继续,但不会造成任何不一致,因为这不能使 B1( )- B3( )条件失效。 消 息丢失同样不会造成不一致, 因为没有收到一 条消息 唯一 能 有 的 影响就是阻止某些动作的发生 。 因此,协议保证了一致性,即使在 牧师 离开了议会厅或者消息丢失的情况下。 收到多个消息拷贝会导致 某些动作 被 重复执行。 除了步骤 (3)之外, 第二次 执行 一个 动作没有任何影响。 例如在步骤 (4)中发送 Voted

32、(b,q)多次和只发送一次效果是一样的。 对于步骤 (3),可以通过在 每次 执行时在律簿背面记录下 一个标志 的方式来避免重复执行。 这样即使在同一个消息会被递送多次的情况下,也能保证一致性 条件 了 步骤 (1)- (4)描述了发起一个表决和对 其投票的完整协议。剩下来的事情就是决定表决的结果和宣布新法令的产生。 回顾下,当且仅当 法定人数集 中的所有 牧师 都投票通过时一个表决才算成功, 一个成功表决通过的法令,就是被神权议会选择的法令 。协议的剩余部分是: ( 5) 如果 p 收到 了 Q(表决 b 的 法定人数集 )中每个 q 的 Voted(b,q)消息, 那么他在自己的律簿上记下

33、 d(这次表决的记录),然后发送 Success(d)消息给每个 牧师 ( 6) 一个 牧师 在收到 Success(d)消息后,将法令 d 记录到他的律簿 上。 步骤 (1)- (6)描述了单个表决如何 达成 。 议会协议允许任何一个 牧师 在 任何时间发起 一个 表决。每一个步骤都保证 B1-B3 条件,因此整个协议也保证这些条件 。 因为一个 牧师 只有在一个法令是某个成功表决的法令时,才在律簿上记录下它,所以根据定理 1, 牧师 们的律簿是能够 The Part-Time Parliament 11 保持一致的。 协议并没有解决可进展性问题。 (即只保证了一致性,而没有保证流程一定能进

34、行下去) 在步骤 (3)中,如果法令是有条件 B(3)决定的,那么有可能这个法令已经北写在某个 牧师 的律簿上了。 那个 牧师 不需要在 法定人数集 中:他可能已经离开了议会厅。 这样的话,如果步骤3 在选择 d 时 允许任何更大的自由 ( 更大的 表决编号),那么一致性将不 能保证。 2.3. 基本协议 ( The Basic Protocol) 在上文的初级 协议中,一个 牧师 必须记录 (i) 他发起的每一个表决的编号, (ii) 他的每个投票,和 (iii) 他发出的 每一个 LastVost 消息 。保持 跟踪 记录 所有这些信息对于 那些繁忙的 牧师 来说是一件困难 的事情。 Pa

35、xos 人因此对初级协议 作 了 进一步约束,得到一个更具实用性 的基本协议。 在基本协议中,每个 牧师 p 必须且只需 在他的律簿后面记录如下信息: lastTriedp: 由 p 试图发起的最后一个表决的编号, 如果没有发起过则记录 - prevVotep:由 p 投票的所有表决中,编号最大的表决对应的 p 的投票,如果没有投过票则记录 - nextBalp:由 p 发出的所有 LastVote(b,v)消息中,表决编号 b 的最大值。 初级协议的步骤 1-6 描述了 一个单一的表决怎样通过他的发起者 牧师 p 指挥 ( conduct) 。初级协议允许 p 并行的 指挥 任意数量的表决

36、。 在基本协议中,他一个时间只 指挥 一个表决 编号为 lastTriedp的表决。 在 p 发起这个表决后,他忽略与 他先前发起的 任何 其他 表决相关的消息。 牧师 p 在一个小纸片上 保留编号为 lastTriedp的表决的所 有过程信息。 如果他丢失了这个小纸片,他就对这轮 表决停止 指挥 。 在初级协议中, 牧师 p 发出的每一个 LastVote(b,v)消息意味着承诺不再对 任何 编号 介于 和b 之间的表决投票 。 在基本协议中, LastVote(b,v)消息意味着 更强 的承诺:不再对任何编号小于 b 的表决投票。 这个更强的承诺可能 会 阻止 一个 原本 在 初级协议下是

37、允许 的 投票 。但是介于 初级协议总是 会 给 p 不 投票的选择 , 所以 基本协议不会要求 p 作出任何违反初级协议的事情 。 初级协议的 1-6 个步骤在基本协议中变为如下 6 步: (1) 牧师 p选择一个比 lastTriedp大的表决编号 b,设置 lastTriedp为 b, 然后 发送 NextBallot(b)消息给某些 牧师 。 (2) 在从 p 收到一个 b 大于 nextBalq的 NextBallot(b)消息后, 牧师 q 将 nextBalq设置为b,然后 发送一个 LastVote(b,v)消息给 p,其中 v 等于 prevVoteq。( b= nextBa

38、lq的NextBallot(b)消息将被忽略) (3) 在从某个多数集合 Q 中的每个成员都收到一个 LastVote(b,v)消息后, 牧师 p 发起一个编号为 b,法定人数集为 Q,法令为 d 的新 表决, 其中 d 的选择遵守 B3 条件。 然后他发送一个 BeginBallot(b,d)消息给 Q 中的每一个 牧师 (4) 在收到一个 b= nextBalq的 BeginBallot(b,d)消息后, 牧师 q 在编号为 b 的表决中投出他的一 票,设置 prevVotep为这一票 ,然后发送 Voted(b,q)消息给 p( b!= nextBalq的 BeginBallot(b,d

39、)消息 将被 忽略 ) The Part-Time Parliament 12 (5) 在 p 收到 Q 中每一个 q 的 Voted(b,q)消息 后 (这里 Q 是表决 b 的法定人数集合, b= lastTriedp) , 他将 d(这轮表决的法令) 记录 到他的律簿上,然后 发送 一条 Success(d)消息给每个 q (6) 一个 牧师 在接收到 Success(d)消息后,将法令 d 写到他的律簿上。 基本协议是初级协议的一个受约束版本 ,意味着基本协议允许的任何 行为 在初级协议中都是允许的。 初级协议满足一致性条件,那么基本协议也满足一致性 条件。 像初级协议一样,基本协议并

40、未要求 任何 行为 最终会被执行 , 因此它同样没有解决进展性 ( progress) 问题 从 B1-B3 到基本协议 的演化过程可以 显而易见的看出一致性条件是 满足的。但是 ,某 些同样给人感觉“ 显而易见 ” 的古老智慧已经 被认为是 错误的了。 因此具有怀疑精神的公民们要求一个更严格的证明。 附录里重现了 Paxos 的数学家们对协议 满足 一致性 条件 的证明 。 2.4. 完整的神会协议( The Complete Synod Protocol) 基本协议维护了一致性,但是没有保证任何 可进展性,因为它仅仅规定 了一个 牧师 可以 怎么做;它没有要求他一定 要 做任何事情 。 完

41、整的协议和基本协议一样包含 6 个步骤来 操控 一个表决 。 为了促成可进展性,它 很直观地 要求 牧师 们尽 可能 快 地 执行协议的 2-6 步骤 。 为了满足可进展性条件,必须要求某些 牧师 来执行步骤 1 来发起一轮表决。 完整协议的关键一 点是决定 什么时候一个 牧师 应该发起一轮表决 。 永远不发起表决肯定会阻止进展 性 。但是发起太多的表决同样会阻止进展性。 假设 b 比任何其他表决的编号都大, 牧师 q 在步骤 2 中收到一条 NextBallot(b)消息会引出一个承诺,阻止他在步骤 4 中对任何之前发起的表决投票。 这样,一轮新表决的发起会阻止任何之前发起的表决成功。 如果

42、新的表决 以不断增大的编号 在之前的表决有机会成功之前不断地被发起,那么整个(会议)将会没有任何进展。 达到可进展性条件要求新的表决直到某个表决成功之后才发起,但是不被频繁地发起。 为了开发完整协议, Paxos 人首先必须知道 信使传递消息和 牧师 响应要花费多长时间。 他们测定了一个没有离开议会厅的信使,总会在 4 分钟之内送出消息,一个呆在议会厅中的 牧师 ,总会在 7 分钟内处理消息。 这样如果 p 和 q 在议会厅中,这时某些事件使得 p 发送一条消息给 q,并且 q 响应了一个答复给 p,那么 在 没有任何信使离开议会厅 的情况下 , p 将在 22 分钟之内收到这个 答复。 (

43、牧师 p 会在事件的 7 分钟内发出消息, q 将会在接下来的 4 分钟内收到这个消息, 然后 在 7 分钟内作出响应, 答复会在接下来的 4 分钟内送达 p ) 假设只有一个 牧师 在发起表决,他 在协议的步骤 1 中给 每个 牧师 发送一条消息 。 如果 p 在多数 牧师 呆在议会厅中时发起表决,那么他可以期望在 22 分钟之内执行步骤 3,在另一个 22分钟之内执行步骤 5。如果他没有能够在这些时间内执行这些步骤,那么或者某些 牧师 或信使在 p 发起这个表决后离开了议会厅,或者一个更大编号的表决已经在之前由 另一个 牧师 发起了 (在 p 成为唯一的表决发起人之前) 。 为了解决后一个

44、可能性, p 必须学习其他 牧师 使用的任何编号比 lastTriedp大的表决。 可以通过扩展协议以要求 牧师 q 收到 p 的 NextBallot(b)和 BeginBallot(b,d)消息时,如果发 现 b nextBalq,则将 nextBalq发送给 p 来完成这个学习。这样 牧师 p 就可以发起一个 更大 编号的 新的 表决。 The Part-Time Parliament 13 仍然假设 p 是唯一发起表决的 牧师 ,假定他被要求当且仅当如下条件满足时,才发起一个新表决 : (i)在最近的 22 分钟之内他没有执行步骤 3 或步骤 5,或者 (ii)他得知另一个 牧师 已经

45、发起了一个编号更大的表决。 如果议会厅的门在 p 和过半的 牧师 在里面时锁住了 ,那么一条法令会在 99 分钟内通过并写到议会厅中每个 牧师 的律簿上。 ( 22 分钟 牧师 p 启动下一个表决, 22 分钟得知另一个 牧师 发起过更大编号的表决, 55 分 钟完成一个成功表决的步骤 1-6) 。这样,在只有一个 牧师 发起表决,并 且 不会离开议会厅的前提下,可进 展性条件将会被满足 。 完整协议因此包含一个流程来选择一个唯一的 牧师 ,称作 总统 ,来发起表决。 在多数形式的政府中,选择一个 总统 会 是一个困难的问题。 但是这种 困难仅仅是因为大多数政府要求任意时候都必须有一个 唯一的

46、 总统 存在 。 例如在美国,如果某些人认为 Bush 已经当选为 总统 ,而这时另一些人认为是 Dukakis,就会造成混乱,因为 其中的某个可能会决定签署 某个法案而 同时 另一个 决定 否决这个法案。 但是在 Paxos 的神会中,拥有多个 总统 只会阻止进展性,而不会导致不一致。 为了完整协议满足可进展性条件,选择 总统 的方法只需要满足以下“ 总统 选举要求”: 如果没有人进入或离开议会厅,那么接下来的 T 分钟之内只会有一个 议会厅中的 牧师 会认为他自己是 总统 。 如果满足了 总统 选举要求,那么完整协议将具有如下特性:如果多数的议员在议会厅内, 并且在 T+99 分钟内没有人

47、进出议会厅,那么在这段时间的最后,议会厅中的每个 牧师 的律簿上 都会 记下一条法令。 Paxos 人将议会厅中名字在字典顺序中排在最后的 牧师 选为 总统 , 尽管我们不知道这个 具体是如何进行的。 如果一个 牧师 每隔 T-11 分钟将自己的名字发给所有其他的 牧师 , 并且 一个牧师 当且仅当在 T 分钟内 没有收到“更高的名字”时 才认为自己是 总统 , 那么 总统 选举要求就可以满足。 通过在基本协议的基础上,要求 牧师 们及时的处理步骤 2-6,增加一个选择一个 总统 来发起表决的方法,并且要求 总统 在适当的时候发起表决,我们就得到了完整的协议。 很多协议的细节还尚不清楚。 我描

48、述了选择 总统 和决定 总统 在什么时候应该发起表决的简单方法,但是这些无疑不是 Paxos 使用的方法。 我给出的要求 总统 即使在一个法令通过后仍然持续发起表决的规则,保证了刚进入议会厅的 牧师 能够 学习到被通过的法令 。一定有更好的方法保证 牧师 们能够学习到已经通过的法令。 同样的,在选择 总统 的过程中,每一个 牧师 适当的发送他自己 的 lastTriedp值到其他 牧师 , 允许 总统 在他的第一次尝试中选择足够大的表决号。 Paxos 人认识到任何 想达成 可进展性 条件 的协议都会 涉及 到对 时间 流逝 的度量 。 上文给出的选择 总统 和发起表决的协议,可以很容易的构建为精确的 算法:设置计时器并在超时发生时采取动作 -假设是 完全精确的计时器 。 一个近似的分析显示在计时器 不完全精确,但是 有一个已知 的精度 范围 时 ,这样的协议也可以达成。 Paxos 有技艺的沙漏师傅可以毫不困难的制造出 合适的 沙漏计时器。 给出 Paxos 数学家的精密证明后,他们普遍相信 已经找到了一个最优 的满足 总统 选择要求 的算法 。 我们只能希望这个算法会在将来被发现。 The Part-Time Parliament

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报