分布式选举算法-霸道算法/欺负算法(bully algorithm)

简介: 分布式 选举 算法 霸道算法 欺负算法bully algorithm

定义

霸道算法每次都会选出存活的进程中标识符最大的候选者作为协调者。

霸道算法之所以霸道是因为当有新的进程加入时,如果这个新进程是整个分布式系统进程标识符最大的进程那么它会决定自己是协调者,并向其他进程选举。即使当前有协调者进程正在正常工作,新进程也会替换掉老的协调者进程,这就是霸道算法的霸道点。

前提条件

  1. 霸道算法需要知道如何与整个分布式系统中所有进程通信。
  2. 霸道算法需要知道其他进程的标识符。

霸道算法假设进程间消息发送是可靠的,但是它允许在选举期间进程崩溃。

消息类型

霸道算法主要有三种消息类型:

  1. 选举消息: 用于宣布选举。
  2. 应答消息:用于回复选举。
  3. 协调者消息:用于宣布当选进程的协调者身份。

选举触发条件

  1. 当前协调者故障

故障检测器可以通过超时发现协调者已经出现故障,那么故障检测器就开始一次选举。

  1. 新的进程加入(老的进程从故障中恢复)

新的进程加入时发送一个选举消息

故障检测方式

基于超时机制。
客户端-服务端交互如下图:

那么一次交互完成的时间应该为消息请求发送时间(T2-T1)+消息处理时间(T3-T2)+消息应答发送时间(T4-T3),总时间为:T4-T1。基于总时间来设计一个超时机制检测故障。

算法流程

  1. 进程P向所有编号比它大的进程发送选举消息;
  2. 如果无人响应,P获胜并称为协调者;
  3. 如果编号比它大的进程响应,则由又想着接管选举工作,P的工作完成。

几个简单的时序图

最大标识符进程选举

在这里插入图片描述

通常选举

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1SJREc3d-1646904209396)(en-resource://database/1798:1)]

算法分析

安全性

安全性是指参与选举的进程P要么没有选举要么已经选定了一个进程Q,Q是选举结束时具有最大标识符的非崩溃进程。

活性

活性是指所有参与选举的进程最终都知道了选举结果或者进程崩溃。

网络带宽

假设目前分布式系统中有N个进程:

  1. 最好情况

最好情况是在协调者故障后,目前正常运行的最大标识符进程立即检测到了协调者的故障立即选举自己并发送N-2个协调者消息给其他小标识符的进程。此时消息数量为θ(N)

  1. 最坏情况

最坏情况是最小标识符的进程先检测到了协调者故障,然后从小到大依次检测到了协调者故障(N-1个进程),然后向其他N-2个进程发送选举消息,此时选举消息数量为(N-2) + (N-3) + ... + 1 + 0为θ(N^2)个选举消息。

实现

简单情况

情况1:只有一个节点

启动后检查是否只有自己,如果只有自己那么就直接将自己设置为Leader。

情况2:有多个节点

启动后对大于自己的节点组播选举消息,等待应答;等待超时后如果没有应答则直接让自己成为Leader然后向其他人组播协调者消息。

情况3:霸道

启动后如果检查其他节点的标识符小于自己,则直接广播自己是Leader消息;当前的协调者收到后将自己Leader的角色放弃改为Follower。

情况4:协调者崩溃

Follower检测到Leader崩溃后,向比自己标识符大的节点发送选举消息。

算法

/**
 * 霸道选举算法
 * 流程节点
 * 1. 配置加载与解析
 * 2. 发起选举
 *  2.1 if 集群中只有自己一个节点,
 *          then 直接选择自己为Coordinator;
 *  2.2 else
 *          if 如果自己的选举标识符比所有的都大,
 *              then 直接向所有的节点发送协调者消息;
 *          else
 *              向所有大于自己选举标识符的节点发送选举消息,等待响应;
 *              if 等待超时后没有节点回复,
 *                  then 直接选举自己为协调者并向所有的节点发送协调者消息
 *              else
 *                  等待协调者消息;
 *                  if 收到协调者消息
 *                      then 设置协调者并将自己设置为follower
 *                  else 进入2.2循环
 *
 *      endif
 * 3. 故障检测
 *  3.1 定时与协调者发起心跳消息进行故障检测
 *      在3T时间内(实现为3次吧,每次T秒钟超时时间)没有响应则认为协调者故障
 *      算法:
 *      send 心跳消息,等待协调者回复
 *      if 心跳消息超时,故障计数+1
 *          if 故障计数 >=3:协调者故障
 *              发起选举;
 *           else
 *              等待下次定时器调用
 *       else
 *          收到了服务;
 *          故障计数清零;
 *
 *
 * @author errorfatal89@gmail.com
 * @date 2022/03/09
 */

代码实现

我简单实现了一版本霸道选举算法,代码地址:霸道选举算法

参考

  1. 维基百科:霸道选举算法
  2. 分布式系统概念与设计(原书第五版)
  3. 分布式系统原理与范型(第二版)
目录
相关文章
|
6月前
|
机器学习/深度学习 自然语言处理 算法
大数据选举预测:算票的不只是选票,还有算法
大数据选举预测:算票的不只是选票,还有算法
265 0
|
6月前
|
负载均衡 算法 调度
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
271 11
|
6月前
|
算法 安全 Python
【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
210 1
|
6月前
|
传感器 机器学习/深度学习 算法
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
157 2
|
6月前
|
并行计算 算法 调度
基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)
基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)
390 0
|
6月前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
331 0
|
7月前
|
运维 算法 5G
【优化管理】基于事件触发的弹性分布式能源管理算法研究(Matlab代码实现)
【优化管理】基于事件触发的弹性分布式能源管理算法研究(Matlab代码实现)
154 0
|
10月前
|
NoSQL 算法 安全
分布式锁—1.原理算法和使用建议
本文主要探讨了Redis分布式锁的八大问题,包括非原子操作、忘记释放锁、释放其他线程的锁、加锁失败处理、锁重入问题、锁竞争问题、锁超时失效及主从复制问题,并提供了相应的优化措施。接着分析了Redis的RedLock算法,讨论其优缺点以及分布式专家Martin对其的质疑。此外,文章对比了基于Redis和Zookeeper(zk)的分布式锁实现原理,包括获取与释放锁的具体流程。最后总结了两种分布式锁的适用场景及使用建议,指出Redis分布式锁虽有性能优势但模型不够健壮,而zk分布式锁更稳定但部署成本较高。实际应用中需根据业务需求权衡选择。
|
运维 NoSQL 算法
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
本文深入探讨了基于Redis实现分布式锁时遇到的细节问题及解决方案。首先,针对锁续期问题,提出了通过独立服务、获取锁进程自己续期和异步线程三种方式,并详细介绍了如何利用Lua脚本和守护线程实现自动续期。接着,解决了锁阻塞问题,引入了带超时时间的`tryLock`机制,确保在高并发场景下不会无限等待锁。最后,作为知识扩展,讲解了RedLock算法原理及其在实际业务中的局限性。文章强调,在并发量不高的场景中手写分布式锁可行,但推荐使用更成熟的Redisson框架来实现分布式锁,以保证系统的稳定性和可靠性。
893 0
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
|
存储 人工智能 算法
解锁分布式文件分享的 Java 一致性哈希算法密码
在数字化时代,文件分享成为信息传播与协同办公的关键环节。本文深入探讨基于Java的一致性哈希算法,该算法通过引入虚拟节点和环形哈希空间,解决了传统哈希算法在分布式存储中的“哈希雪崩”问题,确保文件分配稳定高效。文章还展示了Java实现代码,并展望了其在未来文件分享技术中的应用前景,如结合AI优化节点布局和区块链增强数据安全。