当前位置: 首页 > 工具软件 > jgroups-raft > 使用案例 >

初探Raft算法

罗源
2023-12-01

拜占庭将军问题 wiki

分布式对等网络中的通信容错问题。
在分布式计算中,不同的计算机通过通讯交换信息达成共识按照一套协作策略行动。有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性,这就是拜占庭将军问题。
拜占庭将军问题被认为是容错性问题中最难的问题类型之一。

Raft

Raft动画演示
raft.github.io

** 以下的整理来自以上的动画整理

Raft是实现分布式共识的协议.
我们所有的节点都以跟随者状态开始.
Leader选举
有2个超时设置可控制选举。

** election timeout:follower -> candidates所等待的时间。election timeout被随机分配在150毫秒至300毫秒之间。选举超时后,跟随者成为候选者并开始新的election term选举任期…。

** heartbeat timeout
这些消息以heartbeat timeout心跳超时指定的时间间隔发送。
跟随者然后响应每个Append Entries 追加条目消息。
此选举任期将持续到追随者停止接收心跳并成为候选人为止。

** 分裂
两个节点都开始以相同的任期进行选举…
等待新的选举周期,再试一次。

日志复制
当选出一位领导人后,我们需要将系统的所有更改复制到所有节点。
通过使用与心跳相同的 Append Entries添加条目消息来完成此操作。
…然后将更改操作在下一个心跳发送给追随者。
一旦大多数追随者认可,便提交该条目。

面对网络分区,Raft也可以保持一致。
由于我们的分区,我们现在有了两位领导者。
节点B无法复制为多数,因此其日志条目保持未提交状态。

修复网络分区
节点B将看到较高的选举期限并退出
节点A和B都将回滚其未提交的条目并匹配新领导者的日志。
现在,我们的日志在整个集群中是一致的。

News

kafka3.0,也正式弃用了zookeeper,转向raft。
参考:Release Notes

以下文章写的不错,可以看看
拜占庭将军问题和 Raft 共识算法讲解

 类似资料: