收藏 分享(赏)

选举算法.docx

上传人:hwpkd79526 文档编号:6545951 上传时间:2019-04-16 格式:DOCX 页数:6 大小:102.95KB
下载 相关 举报
选举算法.docx_第1页
第1页 / 共6页
选举算法.docx_第2页
第2页 / 共6页
选举算法.docx_第3页
第3页 / 共6页
选举算法.docx_第4页
第4页 / 共6页
选举算法.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、一、 简介选举算法中的概念:1.选举:选举是分布式系统中的一种常用的计算类型,它从进程集中选出一个进程执行特别的任务。例如,在分布式系统出现故障后,通常需要重新组织活动的节点使它们继续执行有用的任务。在这个重新组织和配置的过程中,第一步就是要选出一个协调者来管理这些操作。故障的检测通常是基于超时机制的。如果一个进程超过一定的时间没有收到协调者的响应,它就怀疑协调者出了故障并启动选举过程。选举在群服务器、负载平衡、重复数据更新、应急恢复、连接组和互斥等领域都有广泛应用。2.选举过程:(a)选择一个具有最高优先级的领导者, (b)通知其他进程谁是领导者(优胜者)3.选举问题:在对各种应用程序或分布

2、式系统设计分布式算法时,一些一般性的问题经常可以看成是一种选举问题,选举问题成为分布式计算的基本问题。从具有同一地位(状态)的进程的形态开始,系统最后到达一个形态,在这个形态,进程中有一个进程处于 leader(领导人)地位(状态),而其他所有进程则处于 lost(落选)状态。例如,要启动集中式算法,且没有一个优先的候选人作为算法的初始进程,就需要先进行进程的选举。选举问题也称找领导人问题。问题是从具有同一状态的进程配置开始,最后到达一种配置状态,其中只有一个进程处于 leader 状态,而其它所有进程处于 lost 状态。如果要执行集中式算法,且没有一个优先的候选人作为算法的初始进程,就要举

3、行进程的选举。4.选举算法:基于所使用的网络类型,人们提出了不同的分布式选举算法:(a)存储转发网络,包括单向环、双向环、完全图、树和弦环, (b)广播网络 大部分选举算法是基于全局优先级的,其中,每个进程(处理机)预先分配一个优先级。这些算法也称作 extrema-finding 算法。对 extrema-finding 算法的主要反对意见是一旦选中一个领导者时,就必须保证它是一个正确的选择,比如,从性能或可靠性的观点来看。5.选举算法的性质:1.每个进程有相同的局部算法;2.算法是分散式的,即,进程的任意非空子集都能开始一次计算;在每次计算中,算法达到终止配置。在每个可达的终止配置中,只有

4、一个进程处于领导人状态,而其它所有进程处于失败状态。最后一个性质可以弱化,只要求有一个进程处于领导者状态。6.选举算法的分类:(1)基于环形拓扑的(环算法) ,其中每个进程不知道其它进程的优先级。(2)基于全连接拓扑的,其中每个进程知道其它进程的优先级。(3)基于非比较的,其中消息被“编码”在以轮(Round)表示的时间中,这种类型的算法只能工作在同步系统中。 前两个算法基于比较的,通过比较所有进程 id 和发送接收消息中的 id 选出一个领导者。二、介绍几种常见的选举算法:1.基于环形拓扑的选举算法:算法基本过程:(1)n 个进程按任意顺序排列在一个环上。(2)进程的 id 不同,值越小的优

5、先级越高。(3)当任意进程 Pi收到一个选举消息时,需要将其中的 id 与自己的 id 相比,并将较小者放入选举消息中向环的下游发送。(4)当任意进程 Pi 收到包含自己 id 的选举消息时,可确认自己当选,这时它需要将这个消息通知所有其它的进程。2.基于树算法的选举算法如果网络的拓扑结构是树,或者网络的生成树可用,就可以使用网络的树算法进行选举。在树选举算法中,要求至少所有的叶子结点是算法的初始进程。为了让所有的叶子进程成为初始进程,我们可以增加一个唤醒阶段。想要启动选举的进程将消息扩散到所有进程中,布尔变量 ws 用于控制每个进程至多发送一次消息,变量 wr 用于对进程所接收的消息计数。当

6、进程通过每条通道接收到消息时,进行最小标识的计算,并使每个进程判定。当进程进行判定时,就知道了领导人的标识。如果该标识与进程标识相等,它就称为领导人,否则就成为落选进程3.环算法(1)该环算法不适用令牌,假设进程按照物理或者逻辑顺序进行排序,那么进程都知道它的后继者当任何一个进程注意到协调者不工作时,它构造一个带有自己的进程号的 election 消息,并将消息发送给后继者。如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个进程。直到找到一个正在运行的进程。(2)在每一步中,发送者将自己的进程编号加入到消息中,以使自己成为协调者候选人之一。(3)最终消息返回到发起这次

7、选举的进程,当发起者收到一条包含自己进程编号的消息时,识别出来。此时消息编程 coordinator 消息,并再一次绕环运行,向所有进程通知谁是协调者(成员列表中进程号最大的那个)4.Garcia-Molina 的欺负算法(bully algorithm)对于每个进程知道所有其他进程的优先级的系统而言,欺负算法是一个可靠的选举算法。同样,具有最高优先级的进程被选中。假设进程可能随时发生故障并恢复。如果一个进程恢复时发现没有其他活动进程的优先级比它高,它将强迫所有优先级比它低的进程让它成为协调者。bully 算法当任何一个进程发现协调者不响应请求时,他发起一次选举,选举过程如下:a P 进程向所

8、有编号比他大的进程发送一个 election 消息b 如果无人响应,则 P 获胜,成为协调者c 如果编号比他大的进程响应,则由响应者接管选举工作,P 的工作完成。任何一个时刻,一个进程只能从编号比他小的进程接受 election 消息,当消息到达时,接受者发送一个 OK 消息给发送者,表明它在运行,接管工作。最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者。他将获胜消息发送给其他所有进程,通知他们新的协调者。当一个以前崩溃的进程恢复过来了后,它将主持一场选举。如果该进程恰好是当前运行进程中编号最大的进程,它将获胜,故此成为欺负算法。算法过程:(1)要求系统中每个进程都知道其他所有进程

9、的优先级。(2)当进程 P 通过超时机制发现当前的协调者不再工作时,要向所有优先级比它高的进程广播选举消息以开始一个选举过程:如果在规定的时间内没有应答,则 P 向所有优先级比自己低的进程发送自己的 id,宣布自己当选。如果收到应答,则 P 设置一个计时器并等待当选者宣布自己的 id; 如果计时器满时还没有收到当选者的消息,则 p 重新开始选举过程。(3)当进程 Pi收到进程 Pj发来的选举消息时:向所有优先级比自己高的进程广播选举消息来开始一个选举过程,并向 Pi 返回一个应答;如果自己有最高优先级,则立即宣布自己当选。欺负算法举例一组由 1 号到 8 号的 8 个进程组成的进程组,开始号码

10、最大的 8 号进程是协调者,但他突然发生故障。 如果 5 号进程首先发现并发起选举,他向所有比它进程号大的进程 6、7、8 发送选举消息, 如图 1(a)所示进程 6 和 7 接收消息后发送回 OK 消息, 如图(b)所示,进程 5 接收到第一个应答时就知道自己的工作已经结束了 , 因为已经有比他进程号大的进程接管他的工作,紧接着进程 6 和 7 都主持选举,如图(c)所示进程 6 发送选举消息给进程 7 和 8,进程 7 只发送选举消息给进程 8 在图(d)中,进程 7 发送 OK 消息给进程 6,而进程 7 没有收到进程 8 的应答消息,从而判断进程 8 已经死了,所以进程 7 成为新的协

11、调者,并通知所有其他进程, 如图(e)所示,此时,系统恢复正常,所有进程继续进行原先的工作。5.基于非比较的算法:在基于非比较的算法中,领导者不是通过和其他进程比较 id 选出来的。而且他的 id 是和用轮表示的时间联系在一起的。所以这些算法是面向同步系统的,其中所有的进程根据轮协调它们的行为。在每轮,进程执行本地更新并和其他进程交换消息。过程:在每个阶段 V=1,2中进行计算,每个阶段都由 n 个连续的轮组成。每个阶段都有一个携带着特殊 id 的令牌一直在环中流转。更特别的,在包含轮(v-1)n+1,Vn 的阶段 v 中只有带着 id=v 的令牌才允许流转。如果存在 id 为 v 的进程 i 即 id(i)=v,且在(v-1)n+1 轮到达之前进程j 没有收到任何非空消息,那么进程 i 就会把自己选举为领导者,并沿着环发送一个包含其 id 的令牌。当这个令牌在传递的时候,所有其他进程都接收到它,这样它们就不选举自己为领导者或者在以后的阶段创建令牌。

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

当前位置:首页 > 网络科技 > 数据结构与算法

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


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

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

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