Raft 作为分布式系统目前最常见的一致性协议, 常于 RocksDB 一起组合作为目前分布式的最流行组合拳, 是非常有必要深入学习理解的, 之前因为各种原因一直没有机会系统的学习, 这次就来系列的学习看看
0x00. 总体规划
整个 Raft 的学习有几个核心的目标, 参考资料和检验方式, 得益于 Raft 已有丰富的官方网站/动画/专栏等学习资料, 所以基本是站在前辈的肩膀上进行初步学习, 并进行实验 Lab 巩固. 下面是具体的 Raft学习路线:
- 了解分布式一致性的背景 (包括拜占庭问题)
- Raft动画入门
- 阅读
Raft Paper - 参考Raft官方网站资料学习
- MIT 6.824 Lab – 自己动手Go实现Raft (重点)
- 阅读经典的开源Raft实现
- 结合具体的开源项目应用来进一步加深理解
0x01. 前世
0x02. 今生
0x0n.更新补充
这次重读我把原来的“资料清单”往前推进了一步,先固定成一套可执行的笔记框架:
- 把三个安全不变量(Election Safety、Log Matching、Leader Completeness)单独写清楚,明确它们分别约束什么。
- 把选举、日志复制、快照安装三条主流程拆开,对应触发条件和常见失败症状。
- 把 6.824 Lab 报错日志映射到不变量,形成“现象 -> 机制 -> 修复”闭环。
term、commitIndex、lastApplied 这几个状态量后续会补成一张对照表,避免调试时概念混用。
flowchart LR
A["timeout"] --> B["Candidate 发起选举"]
B --> C["多数票"]
C --> D["Leader 发送 AppendEntries"]
D --> E["follower 对齐日志"]
E --> F["commitIndex 推进"]
待核验:补齐 6.824 三组最小复现实验(选举抖动、日志冲突回退、快照安装)及失败日志样例。
参考资料: