Raft算法详解:最容易理解的分布式一致性算法

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 挂了:

  1. 某个 Follower 的计时器先超时 → 变成 Candidate,任期 +1,给自己投一票,并向其他节点发 RequestVote 请求。
  2. 其他节点收到请求:
  • 如果 Candidate 的任期更高 + 日志至少一样新 → 投票。
  • 每个节点每个任期只投一票
  1. Candidate 收到过半票数 → 成为新 Leader,开始发心跳。
  2. 如果选票分裂(没人过半)→ 大家超时后重新选举(随机超时避免一直打平)。

生活类比:村长突然死了,村里喇叭喊“谁想当村长举手!”先喊的人先拉票,谁拉到超过半数村民就当选。

5. 阶段二:日志复制(Log Replication)—— 真正干活的部分

客户端所有写操作(SET key=value)必须发给 Leader。

过程超级简单(看图秒懂):

  1. Leader 把命令追加到自己的 日志(Log) 中。
  2. Leader 通过 AppendEntries 消息把日志复制给所有 Follower。
  3. Follower 收到后追加到自己日志,并回复 ACK。
  4. Leader 收到过半 ACK → 把这条日志标记为 committed(已提交)
  5. Leader 把 committed 的结果返回给客户端。
  6. Leader 在下一次心跳里告诉 Follower “哪些日志已经 committed”,Follower 也标记为 committed。
  7. 应用到状态机(执行到内存/数据库)。

即使 Leader 挂了:新 Leader 上台后,会自动把缺失的日志补齐给 Follower(通过日志匹配)。

6. Raft 的三大安全保证(为什么可靠)

  1. 选举安全:一个任期最多一个 Leader(过半票保证)。
  2. 日志匹配:如果两个日志在同一位置有相同任期和索引,则前面所有日志完全相同。
  3. 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 也没那么可怕了?😊

文章已创建 4862

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部