博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式-选举算法
阅读量:5083 次
发布时间:2019-06-13

本文共 925 字,大约阅读时间需要 3 分钟。

本文是《分布式系统原理与范型》读书笔记。

分布式选举,现在大家都知道的是Paxos算法。。。。。

          许多分布式算法需要一个进程充当协调者、发起者或者其他某种特殊的角色。通常由哪个进程充当这个较色并不重要,重要的是它们中要有一个进程来充当。我们假设每个进程有一个唯一的编号,同时还假设每个进程知道所有其他进程的编号。但是进程不知道当前哪个进程正在运行,以及哪些进程崩溃了。

 

1、bully算法。

当任何一个进程发现协调者不响应请求时,他发起一次选举,选举过程如下:

a\ P进程向所有编号比他大的进程发送一个election消息;

b\ 如果无人响应,则P获胜,成为协调者

c\ 如果编号比他大的进程响应,则由响应者接管选举工作,P的工作完成。

   任何一个时刻,一个进程只能从编号比他小的进程接受election消息,当消息到达时,接受者发送一个OK消息给发送者,表明它在运行,接管工作。

最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者。

    他将获胜消息发送给其他所有进程,通知他们新的协调者。

     当一个以前崩溃的进程恢复过来了后,它将主持一场选举。如果该进程恰好是当前运行进程中编号最大的进程,它将获胜,故此成为欺负算法。

 

2、环算法

该环算法不适用令牌,假设进程按照物理或者逻辑顺序进行排序,那么进程都知道它的后继者。

当任何一个进程注意到协调者不工作时,它构造一个带有自己的进程号的election消息,并将消息发送给后继者。如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个进程。直到找到一个正在运行的进程。

在每一步中,发送者将自己的进程编号加入到消息中,以使自己成为协调者候选人之一。

最终消息返回到发起这次选举的进程,当发起者收到一条包含自己进程编号的消息时,识别出来。此时消息编程coordinator消息,并再一次绕环运行,向所有进程通知谁是协调者(成员列表中进程号最大的那个)

 

 
 

转载于:https://www.cnblogs.com/developer-ios/p/5300430.html

你可能感兴趣的文章
Java动态代理
查看>>
java中构造器(Constructor)
查看>>
高版本chrome不再支持window.showmodaldialog 的临时替换方案【用window.open】
查看>>
Mysql 数据库表操作
查看>>
C#.NET画验证码与Cookie验证
查看>>
fafu oj 1048 一个简单的问题 二分
查看>>
NGUI 笔记
查看>>
[转帖] wordpress 的安装过程
查看>>
【转帖】技术选型之Docker容器引擎
查看>>
OEM/ODM/JDM
查看>>
P1004 方格取数
查看>>
简单了解ICMP协议
查看>>
util工具(是否是网络资源、视频播放时间显示转换、显示网速)
查看>>
UVa 1614 奇怪的股市
查看>>
POJ 3252 Round Numbers(数位dp)
查看>>
HTTP错误 404.17
查看>>
阿里云:linux 一键安装web环境
查看>>
开启新的篇章——2018我的梦想
查看>>
grpc类型
查看>>
C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框
查看>>