Rust 实战 · 手写下一代云原生消息队列
15
15
1.0x
00:00/00:00
登录|注册

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 实战 · 手写下一代云原生消息队列》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)