分布式算法设计基础(第七章).docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式算法设计基础(第七章)

第7章 选举算法 在对各种应用程序或分布式系统设计分布式算法时,一些一般性的问题经常可以看成是一种选举问题,选举问题成为分布式计算的基本问题。 选举问题:从具有同一地位(状态)的进程的形态开始,系统最后到达一个形态,在这个形态,进程中有一个进程处于leader(领导人)地位(状态),而其他所有进程则处于lost(落选)状态。 例如,要启动集中式算法,且没有一个优先的候选人作为算法的初始进程,就需要先进行进程的选举。有大量的分布式计算问题可以归结为选举问题,形成了一套一般化的理论,本章按照下列准则进行选举。 (1) 同步系统、匿名进程和容错算法在后续章节中讨论,我们这里总是假设进程和通信是可靠的,系统是完全异步的,以唯一标识区别进程。 (2) 比较不同计算模型的效率,选举问题起着“基准问题”(benchmarking problem)的作用。这里只涉及到比较中所需要的一些结果。 (3) 集中讨论消息复杂度、有改进的时间复杂度的算法。不讨论在时间复杂度和消息复杂度之间权衡、折衷后所得的结果。 7.1 引言 选举问题的概述前面已经介绍,其定义如下。 定义7.1 选举算法是满足下列性质的算法: (1) 每个进程有相同的局部算法; (2) 算法是分散式的,即进程的任意非空子集都能开始一次选举计算; (3) 在每次计算中,算法将到达终止形态。在每一个可达的终止形态中,只有一个进程处于领导人状态,其他进程则处于落选状态。 第三个性质有时可以弱化,只有一个进程处于领导人状态,被选出的领导人得知自己已经当选了,而其他进程可能还不知道自己落选了。 约定:本章所有的算法中,进程p有变量statep,其可能的取值为leader(领导人)和lost(落选)。有时我们还假设在p执行算法的任何步骤之前,statep的为sleep。如果p已经参与了选举,但还不知道它是否赢得了选举,则设statep的值为cand(候选人)。有的算法还使用主动的或现役的(active)、被动的(passive)等状态,将在算法中予以说明。 1.本章的假设 我们假设:本章所讨论的选举问题及其算法,均是在下列假设下进行的: 系统是完全异步的 假设进程不能访问公共时钟,消息传输时间可以任意延迟,但延迟时间有限。 每个进程具有唯一的标识,而且其标识初始时对于进程是可知的 我们常以p标识进程p。这样可以给进程带上某种可比较大小的标识,从而把选举问题转化为求极大/极小值问题。 本章中与以比较为基础的算法有关的一些结果 本章讨论的算法实际上是以比较为基础的算法,这样,可以利用以前以比较为基础的算法的一些结果。 每条消息最多可能包含w位,具有O(w)的消息复杂度 这样做可以公平地比较不同算法的通信复杂度。 2.选举算法与波动算法 进程标识可以用来打破进程之间的对称性。可以这样设计算法,使得具有最小标识的进程就是所选举的进程。于是,按照上一节计算下确界的结果,在一次波动计算中,进程可以计算出最小标识。这表明,可以执行最小标识的一次波动来进行选举,执行之后,具有这个最小标识的进程就成为领导人。由于选举算法必须是分散式的,这个原理只能用于分散式的波动算法。 (1) 基于树算法的选举算法 如果网络的拓扑结构是树,或者网络的生成树可用,就可以使用网络的树算法进行选举。在树选举算法中,要求至少所有的叶子结点是算法的初始进程。为了让所有的叶子进程成为初始进程,我们可以增加一个唤醒阶段。想要启动选举的进程将消息wakeup扩散到所有进程中,布尔变量ws用于控制每个进程至多发送一次消息,变量wr用于对进程接收的消息wakeup计数。当进程通过每条通道接收到消息wakeup时,就开始执行图6-3所示的算法,通过扩充6-3的算法,进行最小标识的计算,并使每个进程判定。当进程进行判定时,就知道了领导人的标识。如果该标识与进程标识相等,它就称为领导人,否则就成为落选进程。 算法7-1 var wsp : boolean init false; wrp : integer init 0; recp[q] : boolean for each q∈Neighp init false; vp : P init p; statep : {sleep,leader,lost} init sleep; begin if p 是初始进程 then begin wsp:= true; forall q∈Neighp do send wakeup to q end;

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档