Raft 协议

Posted 抓手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raft 协议相关的知识,希望对你有一定的参考价值。

对于强⼀致性共识算法,目前最多使用的就是 Raft 协议。

Raft协议成熟的实现案例

  • 蚂蚁金服的JRaft;
  • Zookeeper 的 ZAB;
  • Consul 的 Raft;
  • 百度的 braft;
  • Apache 的 Ratis;

Raft角色

  • 跟随者(Follower):普通群众,默默接收和来自领导者的消息,当领导者心跳信息超时的时候,就主动站出来,推荐自己当候选人。
  • 候选人(Candidate):候选人将向其他节点请求投票 RPC 消息,通知其他节点来投票,如果赢得了大多数投票选票,就晋升当领导者。
  • 领导者(Leader):处理写请求、管理日志复制和不断地发送心跳信息(维持领导地位)。

随机超时时间特性

Raft 算法中具有随机超时时间特点,每个节点等待领导者节点心跳信息的超时时间间隔是随机的。为了防止多个节点同时发起投票,每个节点分配的选举超时时间也是随机的。

选举过程

  1. 初始状态,所有节点都是跟随者。
  2. 当集群中没有领导者时,等待超时时间最小的节点会因为没有等到领导者心跳信息,发生超时。
  3. 超时自荐,此时该节点就会增加自己的任期编号,并推举自己为候选人,先给自己投一票,然后向其他节点发送请求投票RPC消息,请它们选举自己为领导者。
  4. 选举投票,其他节点接受到候选人的RPC消息时,并且在编号为1的任期内,没有投过票,那么就把选票投给该候选人,然后增加自己的任期编号。
  5. 新领导产生,候选人在选举超时时间内赢得了大多数的选票,那么它就会成为本届任期内新的领导者。
  6. 正常状态,领导者将周期性地发送心跳消息到其他服务。

以上是关于Raft 协议的主要内容,如果未能解决你的问题,请参考以下文章

选票统计

c_cpp 选举的获胜者,选票表示为候选人姓名

c_cpp GFG选举的获胜者,选票代表候选人姓名

Raft理论知识详解

c语言:编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果

c语言编写一个选票统计程序4个候选人分别用ABCD表示,现有20人进行投票,每人只能选ABCD4个人中的一个