• 初探Raft算法


    拜占庭将军问题 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 共识算法讲解

  • 相关阅读:
    NamedParameterJdbcTemplate使用详解
    曾经辛苦造的轮子,现在能否用 ChatGPT 替代呢?
    信号和槽的绑定
    C++11
    【钰娘娘】1373. 二叉搜索子树的最大键值和 DFS
    编译一个基于debian/ubuntu,centos,arhlinux第三方系统的问题解答
    JDK、JRE、JVM
    Pow(x, n)
    二、快速开始
    C++进制转换
  • 原文地址:https://blog.csdn.net/yuan882696yan/article/details/127110955