09|基于Raft协议构建分布式集群(三)
许文强

本课程为精品小课,不标配音频
你好,我是文强。这节课我们继续完善基于 Raft 协议开发的分布式集群。我们会讲解如何开发 Raft Node 上的 Raft 状态机,并最终构建包括发起选举、选举 Leader、心跳发送、心跳过期等等 Raft 协议定义的核心步骤的集群。
首先我们需要再回顾一下 Raft 协议的原理,以便接下来更好地理解 Raft 状态机的构建。建议你主要回顾前面推荐的《Raft 协议的动图原理展示》。从功能上看,Raft 算法由下面六个核心流程组成:
节点发现
发起选举
选举 Leader
心跳检测
心跳超时
重新发起选举
所以我们构建状态机也是围绕这六点展开的。最开始先来记住一个定义,就是:Raft 状态机本质上是一个 Tokio 的任务(也就是 Tokio Task)。接下来我们简单聊一下 Raft 状态机的运行原理。
状态机运行原理
先来看下面这张图:

如上图所示,Raft Node 主要由 gRPC Server、Raft 状态机、Raft Storage 三部分组成。其中最关键的是 Raft 状态机,它驱动了 Raft Node 向前运行。从启动流程的角度看,服务启动后,会先启动 gRPC Server、初始化 RawNode,然后启动 Raft 状态机。Raft 状态机本质上是一个 Loop 线程,它会不间断地运行去驱动 RawNode 向前运行。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

1. Raft协议的核心流程包括节点发现、发起选举、选举Leader、心跳检测、心跳超时和重新发起选举。 2. Raft状态机是一个Tokio任务,驱动Raft Node向前运行,包括Leader节点检测新用户数据写入并分发给Follower节点,以及Follower节点定时检查心跳等操作。 3. Raft状态机通过生成不同类型的消息,如发起选举、投票选举Leader、心跳发送等行为,完成Raft集群的运行。 4. 初始化RawNode对象包括构建配置和创建RawNode对象,其中配置项id用于区分不同的投票者,applied表示当前Raft Node上持久化存储的最新的commit index。 5. Raft Node之间需要相互发现,以便进行投票选举并选举出Leader。 6. 状态机的代码由驱动代码和逻辑代码两部分组成,驱动代码负责Raft状态机的运行。 7. 状态机驱动代码的实现逻辑包括初始化存储层实现、初始化配置、初始化投票者列表、初始化日志、创建RawNode实例等步骤。 8. 如果只有一个RawNode,它会被自动选举为Leader。 9. 集群构建的代码运行逻辑包括单个Raft Node启动、网络层gRPC Server和Raft状态机启动、判断是否有Leader、获取Leader信息或重新发起选举、以及Leader向Follower发送心跳信息等步骤。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 实战 · 手写下一代云原生消息队列》
《Rust 实战 · 手写下一代云原生消息队列》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论