选举算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、简介选举算法中的概念:
1.选举:
选举是分布式系统中的一种常用的计算类型,它从进程集中选出一个进程执行特别的任务。例如,在分布式系统出现故障后,通常需要重新组织活动的节点使它们继续执行有用的任务。在这个重新组织和配置的过程中,第一步就是要选出一个协调者来管理这些操作。故障的检测通常是基于超时机制的。如果一个进程超过一定的时间没有收到协调者的响应,它就怀疑协调者出了故障并启动选举过程。选举在群服务器、负载平衡、重复数据更新、应急恢复、连接组和互斥等领域都有广泛应用。
2.选举过程:
(a)选择一个具有最高优先级的领导者,(b)通知其他进程谁是领导者(优胜者)
3.选举问题:
在对各种应用程序或分布式系统设计分布式算法时,一些一般性的问题经常可以看成是一种选举问题,选举问题成为分布式计算的基本问题。
从具有同一地位(状态)的进程的形态开始,系统最后到达一个形态,在这个形态,进程中有一个进程处于leader(领导人)地位(状态),而其他所有进程则处于lost(落选)状态。例如,要启动集中式算法,且没有一个优先的候选人作为算法的初始进程,就需要先进行进程的选举。选举问题也称找领导人问题。问题是从具有同一状态的进程配置开始,最后到达一种配置状态,其中只有一个进程处于leader状态,而其它所有进程处于lost状态。如果要执行集中式算法,且没有一个优先的候选人作为算法的初始进程,就要举行进程的选举。
4.选举算法:
基于所使用的网络类型,人们提出了不同的分布式选举算法:(a)存储-转发网络,包括单向环、双向环、完全图、树和弦环,(b)广播网络大部分选举算法是基于全局优先级的,其中,每个进程(处理机)预先分配一个优先级。这些算法也称作extrema-finding 算法。对extrema-finding 算法的主要反对意见是一旦选中一个领导者时,就必须保证它是一个正确的选择,
比如,从性能或可靠性的观点来看。
5.选举算法的性质:
1.每个进程有相同的局部算法;
2.算法是分散式的,即,进程的任意非空子集都能开始一次计算;在每次计算中,算法达到终止配置。在每个可达的终止配置中,只有一个进程处于领导人状态,而其它所有进程处于失败状态。最后一个性质可以弱化,只要求有一个进程处于领导者状态。
6.选举算法的分类:
(1)基于环形拓扑的(环算法),其中每个进程不知道其它进程的优先级。(2)基于全连接拓扑的,其中每个进程知道其它进程的优先级。
(3)基于非比较的,其中消息被“编码”在以轮(Round)表示的时间中,这种类型的算法只能工作在同步系统中。
前两个算法基于比较的,通过比较所有进程id和发送接收消息中的id选出一个领导者。
二、介绍几种常见的选举算法:
1.基于环形拓扑的选举算法:
算法基本过程:
(1)n个进程按任意顺序排列在一个环上。
(2)进程的id不同,值越小的优先级越高。
(3)当任意进程P
收到一个选举消息时,需要将其中的id与自己的id相比,
i
并将较小者放入选举消息中向环的下游发送。
(4)当任意进程Pi收到包含自己id的选举消息时,可确认自己当选,这时它需要将这个消息通知所有其它的进程。
2.基于树算法的选举算法
如果网络的拓扑结构是树,或者网络的生成树可用,就可以使用网络的树算法进行选举。在树选举算法中,要求至少所有的叶子结点是算法的初始进程。为了让所有的叶子进程成为初始进程,我们可以增加一个唤醒阶段。想要启动选举的进程将消息
发送一次消息,变量wr用于对进程所接收的消息
3.环算法
(1)该环算法不适用令牌,假设进程按照物理或者逻辑顺序进行排序,那么进程都知道它的后继者当任何一个进程注意到协调者不工作时,它构造一个带有自己的进程号的election消息,并将消息发送给后继者。如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个进程。直到找到一个正在运行的进程。
(2)在每一步中,发送者将自己的进程编号加入到消息中,以使自己成为协调者候选人之一。
(3)最终消息返回到发起这次选举的进程,当发起者收到一条包含自己进程编号的消息时,识别出来。此时消息编程coordinator消息,并再一次绕环运行,向所有进程通知谁是协调者(成员列表中进程号最大的那个)
4.Garcia-Molina的欺负算法(bully algorithm)
对于每个进程知道所有其他进程的优先级的系统而言,欺负算法是一个可靠的选举算法。同样,具有最高优先级的进程被选中。假设进程可能随时发生故障并恢复。如果一个进程恢复时发现没有其他活动进程的优先级比它高,它将强迫所有优先级比它低的进程让它成为协调者。
bully算法
当任何一个进程发现协调者不响应请求时,他发起一次选举,选举过程如下:a\ P进程向所有编号比他大的进程发送一个election消息
b\ 如果无人响应,则P获胜,成为协调者
c\ 如果编号比他大的进程响应,则由响应者接管选举工作,P的工作完成。
任何一个时刻,一个进程只能从编号比他小的进程接受election消息,当消息到达时,接受者发送一个OK消息给发送者,表明它在运行,接管工作。
最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者。他将获胜消息发送给其他所有进程,通知他们新的协调者。当一个以前崩溃的进程恢复