Raft算法详解:最容易理解的分布式一致性算法(2026版)
Raft 是目前最容易理解的分布式一致性算法。
它不是为了取代 Paxos,而是专门设计成“让普通程序员也能看懂”的版本。
一句话总结:
Raft = “选村长 + 村长发公告 + 大家抄公告”
只要大多数节点(过半)同意,系统就能保持一致,即使部分节点宕机、网络分区。
Raft 被广泛用于:Etcd、Consul、TiKV、CockroachDB、Kubernetes 等核心组件。
下面用最白话 + 图解 + 类比,帮你彻底搞懂。
1. 为什么需要 Raft?(背景故事)
在分布式系统中,多个节点要对“数据”达成一致(比如账户余额、配置、任务分配),但会出现:
- 节点宕机
- 网络延迟、分区
- 消息丢失、乱序
传统 Paxos 太难懂(论文被吐槽“像读天书”)。
Raft 的作者说:“我们把 Paxos 拆成领导者选举 + 日志复制 + 安全性三个独立模块,每个模块都像生活中的事。”
2. Raft 的三大角色(超级好记)
任何一个节点在任意时刻只可能是以下三种角色之一:
- Follower(追随者):普通村民,听村长的话,默认状态。
- Candidate(候选人):想当村长的人(选举时临时角色)。
- Leader(领导者/村长):唯一一个发号施令的人,所有写操作必须经过它。
关键规则:一个任期内只能有一个 Leader(后面会讲“任期”)。
3. 任期(Term)—— Raft 的“时间戳”
- 任期是一个单调递增的数字(0、1、2、3…)。
- 每次选举成功后,任期 +1。
- 收到更高任期的消息 → 立刻变成 Follower 并更新自己的任期(保证旧 Leader 自动下台)。
类比:公司换 CEO,每换一次就换一个“届数”,新 CEO 说话永远比旧的管用。
4. 阶段一:领导者选举(Leader Election)—— 最核心部分
正常情况下:
- Leader 每隔一段时间给所有 Follower 发 心跳(Heartbeat)(AppendEntries 空消息)。
- Follower 收到心跳 → 重置自己的选举超时计时器(随机 150~300ms)。
如果 Leader 挂了:
- 某个 Follower 的计时器先超时 → 变成 Candidate,任期 +1,给自己投一票,并向其他节点发 RequestVote 请求。
- 其他节点收到请求:
- 如果 Candidate 的任期更高 + 日志至少一样新 → 投票。
- 每个节点每个任期只投一票。
- Candidate 收到过半票数 → 成为新 Leader,开始发心跳。
- 如果选票分裂(没人过半)→ 大家超时后重新选举(随机超时避免一直打平)。
生活类比:村长突然死了,村里喇叭喊“谁想当村长举手!”先喊的人先拉票,谁拉到超过半数村民就当选。
5. 阶段二:日志复制(Log Replication)—— 真正干活的部分
客户端所有写操作(SET key=value)必须发给 Leader。
过程超级简单(看图秒懂):
- Leader 把命令追加到自己的 日志(Log) 中。
- Leader 通过 AppendEntries 消息把日志复制给所有 Follower。
- Follower 收到后追加到自己日志,并回复 ACK。
- Leader 收到过半 ACK → 把这条日志标记为 committed(已提交)。
- Leader 把 committed 的结果返回给客户端。
- Leader 在下一次心跳里告诉 Follower “哪些日志已经 committed”,Follower 也标记为 committed。
- 应用到状态机(执行到内存/数据库)。
即使 Leader 挂了:新 Leader 上台后,会自动把缺失的日志补齐给 Follower(通过日志匹配)。
6. Raft 的三大安全保证(为什么可靠)
- 选举安全:一个任期最多一个 Leader(过半票保证)。
- 日志匹配:如果两个日志在同一位置有相同任期和索引,则前面所有日志完全相同。
- Leader 完备性:已 committed 的日志永远不会被覆盖(新 Leader 必须包含所有已 committed 日志)。
这些保证让 Raft 即使在网络分区、节点任意宕机重启的情况下,仍能保证一致性。
7. Raft 在真实系统中的样子(2026 现状)
- Etcd(Kubernetes 默认存储)→ 纯 Raft
- Consul → Raft + Gossip
- TiKV → Raft 多组(每个 Region 一个 Raft 组)
- CockroachDB → Raft
- 字节、阿里、腾讯 内部很多自研存储也用 Raft 或其变种
8. Raft vs 其他算法(快速对比)
| 算法 | 难度 | 是否易理解 | 是否有 Leader | 实际使用场景 |
|---|---|---|---|---|
| Paxos | ★★★★★ | 极难 | 无固定 | 早期 Google 系统 |
| Raft | ★☆☆☆☆ | 极易 | 有固定 | 绝大多数新系统 |
| Zab | ★★☆☆☆ | 中等 | 有固定 | ZooKeeper |
| Viewstamped | ★★★☆☆ | 中等 | 有固定 | 较少 |
最后送你一句话心法(背下来就忘不了)
“Raft 就是选村长 + 村长统一发通知 + 大家同步抄作业”
只要大多数人(过半)同意,系统就一定是一致的。
想再深入吗?我可以立刻给你:
- 手写 Raft 伪代码(200 行以内)
- Etcd 中 Raft 的真实配置参数
- Raft 动画视频推荐 + 模拟器链接
- Raft 面试 10 道高频题(带答案)
直接说“我要 XXX”,我马上发~
现在你是不是觉得 Raft 也没那么可怕了?😊