基于电商场景的高并发RocketMQ实战-Raft协议的leader选举算法、Broker基于状态机实现的leader选举

🌈🌈🌈🌈🌈🌈🌈🌈

【11来了】文章导读地址:点击查看文章导读!

🍁🍁🍁🍁🍁🍁🍁🍁

Raft 协议的 leader 选举算法

Raft 协议是一种分布式一致性算法,用于解决分布式系统中的数据一致性问题。

Raft 协议将整个系统的状态分为 3 种角色:领导者 leader、跟随者 follower、候选者 candidate

那么通过 Raft 协议进行的 leader 选举算法流程如下:

  1. 每个 follower 都会给自己设置一个 150ms~300ms 的随机倒计时时间
  2. 第一个倒计时结束的 follower,先将自己的身份转变为 candidate,并且表示自己想要去竞选为 leader,于是先投自己一票
  3. 此时,这个 candidate 还会去找其他的 follower 进行拉票,其他的 follower 会投票给收到的第一个请求者,当这个 candidate 的票数超过集群中的半数,就成功选举为 leader
  4. 选举成功后,新的 leader 会周期性的向 follower 发送心跳消息,以维持领导地位(follower 设计成为 candidate 的倒计时,每次收到 leader 的心跳都会将倒计时重新刷新,这样当 leader 健康的时候,follower 永远没有机会成为 candidate)

Broker 基于状态机实现的 leader 选举

状态机(State Machine)指的是一种抽象模型,包括一组状态以及在不同状态之间转换的规则,在不同状态下执行的行为是不同的

Broker 在实现 leader 选举就是通过 状态机 来实现的

完整流程图如下:

在启动 Broker 之后,每个 Broker 自己都有一个状态机,状态切换流程如下:

  1. Broker 初始化状态为 follower
  2. 执行 follower 对应行为 maintainAsFollower,判断当前 follower 是否收到来自 leader 的心跳包
    1. 如果没有收到,则开启自己切换为 candidate 状态的倒计时
    2. 如果收到了,证明已经有 leader 了,刷新自己切换为 candidate 状态的倒计时
  3. 当倒计时结束之后切换为 candidate 状态,执行 candidate 状态对应行为 maintainAsCandidate,首先会给自己投一票,之后再想其他 Broker 节点发出给自己投票的请求(其他 Broker 节点只能投一票,会投给最先请求的 candidate)
  4. 判断是否收到半数以上投票
    1. 没有收到,则重置切换为 candidate 的倒计时,重新选举
    2. 收到,则切换状态为 leader
  5. 切换为 leader 状态后,执行 leader 对应行为 maintainAsLeader,此时会定时向其他 broker 节点发送心跳,来维持自己的 leader 地位,如果没有收到了半数以上的心跳响应,则说明当前 leader 与其他节点可能连接断开,则将当前 leader 切换为 candidate 状态
相关推荐
jiayong234 小时前
RocketMQ实战
rocketmq
huisheng_qaq1 天前
【RocketMq源码篇-03】dashboard安装搭建和启动详解(集群版)
rocketmq·rocketmq集群·rocketmq源码·dashboard可视化界面·mq中间件
雨中飘荡的记忆2 天前
布式事务详解:从理论到实践(RocketMQ + Seata)
java·rocketmq
galaxyffang7 天前
RocketMQ 为什么性能不如 Kafka?
分布式·kafka·rocketmq
一叶飘零_sweeeet7 天前
从 Kafka 到 RocketMQ:迁移实战全攻略
分布式·kafka·rocketmq
一叶飘零_sweeeet10 天前
Spring Cloud Alibaba RocketMQ 实战:从底层原理到微服务落地全攻略
微服务·架构·rocketmq
一叶飘零_sweeeet11 天前
RocketMQ 核心解密:NameServer 路由发现与负载均衡的底层逻辑全解析
负载均衡·rocketmq
无心水11 天前
【分布式利器:事务】5、本地消息表vs事务消息:异步方案怎么选?
分布式·rocketmq·分布式事务·saga·事务消息·分布式利器·2pc3pc
huisheng_qaq12 天前
【RocketMq源码篇-02】rocketmq集群搭建详细过程(docker版-2主2从)
docker·rocketmq·rocketmq集群·rocketmq源码·2主2从
无心水12 天前
【分布式利器:RocketMQ】RocketMQ基本原理详解:架构、流程与核心特性(附实战场景)
中间件·架构·rocketmq·topic·rocketmq基本原理·电商金融mq·nameserver