分布式中的选举算法
2017-10-03 21:52
211 查看
很多分布式算法需要有一个进程作为协作者。下面介绍一些常用的选举算法。
算法实现如下:
P向所有编号比它大的进程发送一个ELECTION消息
如果无人响应,P获胜并成为协作者
如果有编号比它大的进程响应,则有响应者接管选举工作。P的工作完成。
将选举获胜的消息发送给所有进程,通知这些进程自己是新的协作者。
当一个以前崩溃了的进程现在恢复过来时,它将主持一次选举。如果该进程恰好是当前正在运行的进程中进程号最大的进程,它将赢得此次选举,接管协作者的工作。这样,最大的进程总是取胜,故称为“欺负算法”。
如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个,直到找到一个正在运行的进程。
在每一步中,发送者都将自己的进程号加到该消息列表中,以使自己成为协作者的候选人之一。
最终,消息返回到发起此次选举的进程。当发起者进程接收到一个包含它自己进程号的消息时,它就识别出这个事件。
此时,消息类型变成COORDINATIOR消息,并再一次绕环运行,向所有进程通知谁是协作者(成员列表中进程号最大的那个)以及新环中的成员都有谁。
这个消息在循环一周后被删除,随后每个进程都恢复原来的工作。
如果有多个ELECTION消息,那么循环多周后被删除。
传统的选举算法
欺负算法
当任何一个进程发现协作者不再响应请求时,它就发起一次选举。算法实现如下:
P向所有编号比它大的进程发送一个ELECTION消息
如果无人响应,P获胜并成为协作者
如果有编号比它大的进程响应,则有响应者接管选举工作。P的工作完成。
将选举获胜的消息发送给所有进程,通知这些进程自己是新的协作者。
当一个以前崩溃了的进程现在恢复过来时,它将主持一次选举。如果该进程恰好是当前正在运行的进程中进程号最大的进程,它将赢得此次选举,接管协作者的工作。这样,最大的进程总是取胜,故称为“欺负算法”。
环算法
当任何一个进程注意到协作者不工作时,它就构造一个带有它自己的进程号的ELECTION消息,并将该消息发送给它的后继者。如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个,直到找到一个正在运行的进程。
在每一步中,发送者都将自己的进程号加到该消息列表中,以使自己成为协作者的候选人之一。
最终,消息返回到发起此次选举的进程。当发起者进程接收到一个包含它自己进程号的消息时,它就识别出这个事件。
此时,消息类型变成COORDINATIOR消息,并再一次绕环运行,向所有进程通知谁是协作者(成员列表中进程号最大的那个)以及新环中的成员都有谁。
这个消息在循环一周后被删除,随后每个进程都恢复原来的工作。
如果有多个ELECTION消息,那么循环多周后被删除。
相关文章推荐
- Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。
- 分布式系统选举算法剖析
- 分布式选举算法
- 分布式系统选举算法剖析
- 分布式-选举算法
- 【转载——两个很基础的选举算法】分布式系统进程的选举
- 分布式选举算法
- 分布式-选举算法
- 分布式系统选举算法剖析
- 分布式全局不重复ID生成算法
- 分布式理论基础-选举、多数派、租约
- corosync集群的选举算法
- 分布式系统中的节点失效算法
- 霸道选举算法
- Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)
- SnowFlake --- 分布式id生成算法
- Distributed System: ZooKeeper系列之三 (Master选举和分布式锁)
- 图解zookeeper FastLeader选举算法
- 如何用Boyer–Moore选举算法解决问题?
- 分布式系统几种典型一致性算法简述