目录

选举

基础

领导者

要求

表现

基于环的选举

算法

要求

表现

故障或者失败

霸凌算法

故障检测

算法

要求

表现


选举

选择独特的流程来扮演领导者的角色,承担特殊的任务
例如

  • 基于服务器的互斥算法需要选举一个服务器进程
  • 伯克利算法

基础

任何进程都可以要求选举
一个进程一次最多可以进行一次选举

  • 选举的结果不取决于哪个进程发起的

当选的进程是唯一的
允许多个进程同时调用一次选举

  • 所有这些进程在一起只能产生一个领导者

进程具有唯一标识符
在任何时间点,一个进程是

  • 参与者,意味着它参与了选举算法的某些运行
  • 非参与者,意味着它目前没有参与任何选举

领导者

具有最大标识符的进程被选中
标识符可以是任何东西

  • 通用标识符:进程ID
  • 其他:IP 地址、磁盘空间或文件数量等。

例子

  • 选举计算负载最低的进程
  • 使用<1/load,i>作为其标识符,其中load>0和进程索引i用于对具有相同负载的标识符进行排序

要求

每个进程 pi 都有一个变量 electedi

  • 包含被选举进程的标识符
  • 当进程首次成为选举的参与者时,设置为特殊值⊥(尚未定义)

E1(安全)

  • 一个参与者进程 pi 已经有electied i = ⊥ 或elected i =P 对于一些未崩溃的进程P ,该进程将在运行结束时以最大标识符被选择

E2(活力)
所有未崩溃的进程 pi 都参与并最终设置 electedi ≠⊥

表现

带宽利用率

  • 与发送的消息总数成正比

回转

  • 单次运行开始和终止之间的序列化消息传输次数

基于环的选举

N 个进程被组织在一个逻辑环中

  • 所有进程都有一个唯一的整数ID
  • 所有消息都围绕环顺时针发送
  • 每个进程 pi 都有一个到环中下一个进程的通信通道,p(i+1) mod N

算法

初始

  • 最初将所有进程标记为非参与者
  • 任何进程都可以开始选举(发起者)
  • 选举开始:一个进程将自己标记为参与者,将其ID放入选举消息中,并顺时针发送到下一个进程

如果消息被转发即向前传递,在任何转发时,将自己的状态标记为参与者

进程收到选举消息时,将消息中的ID与自己的ID进行比较

  • 如果ID更大,则将其转发到下一个进程
  • 如果ID较小,则
    • 如果进程是非参与者(即之前没有转发选举消息),则在选举消息中替换自己的ID并在环上转发
    • 否则,不要转发消息(作为“参与者”)
  • 如果 ID 与自己的 ID 相同,则
    • 这个进程的ID必须最大,成为leader
    • 将自己的状态标记为“非参与者”
    • 用自己的ID向邻居发送选举消息,宣布选举结果

当一个进程收到一个选举消息时

  • 将自己标记为非参与者
  • 将它的变量 electedi 设置为消息中的 ID,除非它是新的协调器,否则将消息转发给它的邻居

要求

E1:安全

  • 满足因为所有标识符被考虑
  • 即使选举同时开始,较小的标识符不能通过较大的标识符

E2:活力

  • 由于可靠的通信而满足

表现

带宽利用率

  • 最坏情况行为:

    • 3N – 1 条消息,按顺序依次发送
    • 最多 2N – 1 条用于选举左手邻居的消息
    • 另外N条选举后通知的消息

回转

  • 3N – 1 条消息传输次数

故障或者失败

不能容忍
故障检测器可用于管理崩溃故障,例如:

  • 修理环
  • 停止转发选举消息
  • 开始新的选举

但故障检测器并不完美

  • 如果最大 ID 的进程崩溃了,但 FD 认为这是“意外”怎么办?
  • 如果 ID 最大的进程还活着但 FD 认为它“可疑”怎么办?

霸凌算法

同步系统
可靠的沟通渠道
进程可能会崩溃!

其他假设

  • 每个进程都知道所有其他进程的标识符
  • 每个进程都可以与其他进程通信

消息类型

  • 选举:宣布选举
  • 答案:回复选举信息
  • 协调者:宣布选举的进程的身份

故障检测

基于可靠的故障检测器

  • Ttrans = 最大消息传输延迟
  • Tprocess = 处理消息的最大延迟

超时

  • T = 2Ttrans + Tprocess
  • 发送消息和接收响应之间可以经过的最长时间

失败:T 内没有响应请求

算法

初始化

  • 进程检测到协调者故障

具有最高 ID 的进程检测到故障

  • 进程知道它拥有最高的 ID(它可以将它的 ID 与所有其他 ID 进行比较)
  • 通过向所有其他具有较低 ID 的节点发送协调者消息来宣布其角色

任何其他进程检测到失败

  • 低ID进程向所有高ID进程发送选举消息
  • 如果在T内没有收到回复:考虑本身作为协调者,将协调者消息发送给具有较低ID的所有进程
  • 否则:等待另一个 T 时间单位让协调器消息从新协调器到达
  • 如果没有协调器消息到达,则开始另一个选举过程

接收协调员消息

  • 进程将变量electioni设置为在coordinator消息中接收到的coordinator的ID

收到选举讯息

  • 进程发回应答消息并开始另一次选举——除非进程已经发起了选举

新进程替换崩溃进程

  • 发起选举
  • 如果它有最高的ID,它会立即发送协调员消息并“欺负”当前协调员辞职

上图是例子,p1-p4有四个进程。

阶段1:进程p1检测到协调者p4出现故障,并宣布进行选举.

阶段2:p2,p3 发送应答消息给p1,并开始他们自己的选举;p3发送应答消息给p2,但是p3没有从出现故障的进程p4收到应答消息。

阶段3:因此,p3决定自己是协调者。但在它发出协调者消息前,它也出现故障。

阶段4:当p1的超时周期T‘过去后(这里我们假设发生在p2超时周期之前),它得出没有协调者消息的结论,并开始另一次选举。最终p2被选为协调者。

要求

E1:安全

  • 如果没有进程被替换并且超时T估计准确则满足
  • 如果崩溃的进程被替换而另一个进程宣布它是新的协调者,则不满意

E2:活力

  • 满足,对于同步系统和可靠传输

表现

最好的情况

  • 具有第二高标识符的进程检测到协调器故障并选举自己的协调器并发送 N-2 条协调者消息

最糟糕的情况

  • 当最低 ID 检测到故障时需要 O(N2) 条消息⇒ N-1 个具有较高 ID 的进程开始选举

终于,选举部分也结束了,辛苦大家观看,内容也是非常的多,还是老规矩,有问题随时评论交流!

第五篇:协调和协定之选举算法相关推荐

  1. 机器学习第五篇:详解决策树-CART算法

    01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到的ID3.C ...

  2. SPT20 协议_过户协议书模板五篇

    过户协议书模板五篇 在现实社会中,协议书使用的情况越来越多,协议书协调着人与人,人与事之间的关系.协议书到底怎么写才合适呢?以下是小编为大家收集的过户协议书5篇,欢迎阅读与收藏. 过户协议书 篇1 房 ...

  3. 《考取HCIA证书看我就够了》第五篇:[HCIA-IoT]物联网技术之感知层技术概览

    系列文章目录 <考取HCIA证书,看我就够了> 1.华为职业认证体系及HCIA介绍 2.[HCIA-IoT]物联网起源与发展 3.[HCIA-IoT]物联网技术之网络层技术概览 4.[HC ...

  4. 计算机信息学院开学演讲稿,大学开学演讲稿【五篇】

    [导语]演讲稿又叫演说词,它是在大会上或其他公开场合发表个人的观点,见解和主张的文稿.演讲稿的好坏直接决定了演讲的成功与失败.演讲稿像议论文一样论点鲜明,逻辑性强,富有特点.本篇文章是无忧考网为大家整 ...

  5. 计算机安全使用宣传,国家网络信息安全宣传周活动方案五篇

    网络安全是便民利民的工程,那么怎样来策划网络安全宣传周活动呢?下面是小编为大家准备关于国家网络信息安全宣传周活动方案五篇,欢迎参阅. 国家网络信息安全宣传周活动方案一 各乡镇党委.县直各部门单位: 根 ...

  6. python实训心得2000_实训总结万能版2000字五篇

    实训总结万能版 2000 字五篇 通过这次实训,我收获了很多,一方面学习到了许多以前没 学过的专业知识与知识的应用,另一方面还提高了自己动手做项 目的能力. 本次实训, 是对我能力的进一步锻炼, 也是 ...

  7. Python之路【第五篇】:面向对象及相关

    Python之路[第五篇]:面向对象及相关 Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance ...

  8. 第五篇:Visual Studio 2008 Web开发使用的新特性

    第五篇:Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN. .NET Framwork 3.5与Visual Studio 2008 包含很多新特性.AJAX的Web开 ...

  9. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

最新文章

  1. 基于Android SQLite的升级详解
  2. R语言构建随机森林模型错误解决:Error in y - ymean : non-numeric argument to binary operator
  3. 来聊聊COCO数据集上两大霸榜模型-CBNet和DetectoRS
  4. 利用OTP为odoo增强安全访问
  5. 当顶流厂商谈论智能手表,他们到底在谈论什么
  6. Web/app端自动化测试对比
  7. windows2016重新配置sid
  8. Maven 学习之旅
  9. POJ2115 C Looooops(线性同余方程)
  10. CoreJavaE10V1P3.2 第3章 Java的基本编程结构-3.2 注释
  11. 杜月笙的六句忠告,学会了不吃亏
  12. 7-38 数列求和-加强版(20 分)
  13. 【javascript培训第一天】语言基础
  14. 万年历c语言程序微博,简易的万年历程序C语言
  15. 【实操】下载在线m3u8视频为本地mp4
  16. 公网SSH远程树莓派【内网穿透】 1-2
  17. matplotlib中绘图常用函数
  18. Odoo 16 企业版手册 - CRM (1)
  19. 【机器学习】深度学习20个笔试题
  20. 基于JAVAOTET交通在线查询购票系统计算机毕业设计源码+系统+lw文档+部署

热门文章

  1. AI删库,程序员背锅?
  2. 专访施巍松:边缘计算早期提出者之一
  3. Uber自动驾驶汽车被赶出了亚利桑那,近300人被裁
  4. 不被邀请又怎样!马云都快买下中国AI芯片的半壁江山了,直怼腾讯和百度
  5. 重磅!Elasticsearch 8 正式发布!
  6. 同事乱用 Redis 卡爆,我真是醉了...
  7. 谈谈 Java 类加载机制
  8. 345 所开设人工智能本科专业高校名单大全
  9. GNN教程:DGL框架中的采样模型!
  10. 第8期Datawhale组队学习计划