Bully、Raft、Zab选举算法的差异比较

本文涉及的产品
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: Bully算法、Raft算法、Zab的差与异。他们如何脱胎于Paxos而成?

Bully选举算法

节点角色:

  • 普通节点
  • 主节点
    消息通知:
  • Election通知:表示“我推举谁为主节点”。如A->B表示A推举B为主节点。
  • Alive通知:对Election通知的应答
  • Victory通知:选举成功后通知所有节点“我成为主节点”的通知。

选举流程:

1.优先发现集群中无主的节点向节点ID比自己大的节点发送Election通知。
2.若当前节点已为集群内节点ID最大节点或未收到Alive通知,则当前节点成为主节点。发送Victory通知宣誓主权。
3.接收到Election通知的节点发送Alive通知反馈。并向节点ID比自己大的节点发送Election通知。重复2步骤。
本算法优缺点:
1.选举快、易实现、算法复杂度低。
2.所有节点需要知道其他节点的节点ID信息。此为前置条件。
3.主节点频繁故障恢复则会触发频繁换主,不稳定。
4.选主过程不如说是寻主过程。

Raft选举算法

节点角色:

  • Follower:跟随者,不参与选主的节点,负责投票。
  • Candidate:候选人,参与选举的节点,选举成功可称为主节点。
  • Leader:领导者,即主节点
    消息通知:
  • 心跳通知:仅有Leader发起,阻止其他节点发起选举,用于宣誓主权。
  • 选举通知:Follower发起,为了竞选Leader。
  • 响应选举通知:接收选举通知后,若当前任期本节点未投票,则响应选举。一个任期一票。遵循“先来先服务”原则。

选举流程:

1.初始启动时所有节点均为Follower角色,各自随机150ms~300ms等待超时。
2.先超时节点发现集群无主,转为Candidate角色,任期+1,率先发出选举通知请求大家给自己投票,并给自己投一票。
3.其余Follower节点接收到选举通知,若任期内未投票,则复制对方任期并投票,重置超时时间。否则静默不响应。
4.Candidate节点统计得票,遵循“大多数派”原则,超过半数票则当选为Leader,给其他节点推送心跳通知宣誓主权。
5.Leader节点故障不可用或因网络分区原因无法发出心跳通知。重复2~4。
本算法优缺点:
1.使用随机超时时间策略简单又有效地解决了并发竞选可能导致选举无效的场景。
2.对比bully算法相较来说,选主结果随机,交互较复杂。
3.网络分区可能导致脑裂问题。
4.频繁的心跳消息带来的性能开销

Zab选举算法

节点状态

  • LOOKING:竞选状态
  • FOLLOWING:随从状态,同步leader状态,参与leader选举投票过程
  • OBSERVING:观察状态,同步leader状态,不参与leader选举投票过程。
  • LEADING:领导者状态

消息通知:

  • 心跳通知:仅有Leader发起,阻止其他节点发起选举,用于宣誓主权。
  • 选举通知:投票消息,包含节点数据ID(zxID)、节点ID(serverID)、选举周期(epoch),被选举节点ID(voteID)

选举流程:

1.初始启动,节点默认为Following状态。
2.Following状态节点切换为Looking状态,先投票给自己,然后将投票消息广播给其他节点。
3.其他节点收到投票消息后,比较zxID和serverID选出主节点,将选出主节点的消息也广播给其他节点。
4.Looking状态节点计算的票数,遵循“大多数派”原则,若超过集群中节点半数则切换为Leading状态,并向其他节点发送心跳消息宣誓主权。
5.其他节点切换为Following状态。
6.Leading状态节点故障不可用或因网络分区原因无法发出心跳通知。重复2~5。
本算法优缺点:
1.结合了bully和Raft算法,选举leader既跟服务器唯一标识(常量)有关。也跟事务ID(变量)先后顺序有关。
2.为Zookeeper定制化设计的选举算法,因此依赖myid和zxID进行协同选举以减少无效选举的情况。

总结

  • Bully选举算法:“霸道”的选主算法,永远遵循“长者”为大原则,集群中ID最大的为主节点。
  • Raft选举算法:“随缘”的选主算法。集群所有节点平等。随机超时时间等待后发起选举,遵循“先到先得”原则、“大多数派”原则。
  • Zab选举算法:“能力+地位”优先的选主算法。先看zxID,zxID相同时看myid。zxID为事务ID,事务ID越大优先考虑选主。myid为服务器ID,全剧唯一,启动后不变。

扩展

最早的分布式共识算法应当是Paxos算法。以上这些算法基本都有Paxos算法的影子。关于Paxos算法逻辑如下:

节点角色:

  • 提案者(proposer):负责对单个值操作生成提案(proposal,一个提案包括提案号和提案值)。并推送到各个接受者
  • 接收者(acceptor):接收提案,并进行提案确认和值确认
  • 学习者(learner):不参与提案和投票,被动接受提案结果,主要用于读扩展和跨区域同步。

消息通知:

  • prepare通知:提案者发出提案号给接收者,并根据接收者响应结果确认提案是否通过。
  • accept通知:提案者发出提案号+提案值给接收者,并根据接收者响应结果确认提案值是否达成了共识。

选举(提案)流程:

1.proposer接收到新请求后,生成提案号。
2.proposer发起prepare请求给所有接收者,并传递提案号。等待接收者响应
3.acceptor接收到prepare请求,若从未接收过其他提案或请求提案号大于已接收的提案号,则通过并响应给proposer。
4.proposer接收到prepare响应后,根据“大多数派”原则判断提案是否通过。若通过则继续发送accept通知给所有接收者。
5.acceptor接收到accept请求,若已接收到比请求提案号更大的提案则拒绝,否则通过。
6.proposer接收到accept响应后,根据“大多数派”原则判断提案值是否通过,若通过则表示本提案已达成共识。
由以上选举(提案)过程可知,Paxos是针对单值的共识。若为多值共识,则简单的可以对Paxos进行多次prepare+accept两段式提交即可。基于这个理论思想,无论是Bully、Raft还是Zab省略了两段式提交中的第一段。即优先选举出Leader节点,再由leader节点进行值提交。

相关文章
|
2月前
|
算法
raft算法的自我理解
本文介绍了Raft算法的基本概念和工作原理,包括它如何通过日志复制和领导选举来实现分布式系统中不同机器的强一致性。
33 2
|
3月前
|
存储 算法 大数据
Apriori算法和Eclat算法差异
Apriori算法和Eclat算法差异
|
4月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
122 11
|
4月前
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
131 8
|
5月前
|
算法 JavaScript 前端开发
深入了解Vue2和Vue3的Diff算法差异!
总的来说,Vue3在Diff算法上的优化体现了更智能的静态内容处理、更高效的动态内容更新以及更灵活的内部结构。这些优化使得Vue3在运行时性能上有了显著的提升,尤其是在大型应用和复杂界面的场景下。通过不断地技术迭代和优化,Vue3为开发者提供了更高效、更易用的前端开发体验。
392 6
|
5月前
|
存储 算法 大数据
Apriori算法和Eclat算法在性能上有哪些主要的差异
Apriori算法和Eclat算法在性能上有哪些主要的差异
|
5月前
|
算法
共识协议的技术变迁问题之Raft的选举算法进行如何解决
共识协议的技术变迁问题之Raft的选举算法进行如何解决
105 7
|
12天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
18天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
6天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。