一篇真正能让同事秒懂 Raft 的漫画长文

一篇真正能让同事秒懂 Raft 的漫画长文

从“脑裂”到“选主”,从“日志黑洞”到“过半提交”,全程零公式、零废话。


0️⃣ 开场白:为什么 90% 的工程师看不懂 Paxos?

“Paxos 像量子力学——你知道它是对的,但你永远讲不清。”

两位斯坦福教授(Raft 作者)也学不会 Paxos,干脆重新发明了一个工程友好的算法——Raft
今天,我们就用 1 张图 + 3 段话 + 8 个面试问答,带你彻底吃透它。


1️⃣ 一张图记住 Raft 的三板斧

子问题一句话解释生活化比喻
Leader Election选班长谁先举手谁当班长,任期制
Log Replication班长抄作业给同学过半同学收到才算交齐
Safety班长不能篡改已交作业旧作业永远不被覆盖

把下面这张图保存到手机,面试前 30 秒翻一次。

raft-overview


2️⃣ 状态机:3 种角色、2 个超时

🎭 3 种角色

  • Follower 群众:只接收班长指令
  • Candidate 候选人:举手竞选
  • Leader 班长:唯一可对外服务

⏰ 2 个超时

超时类型触发动作默认值
Election TimeoutFollower → Candidate150~300ms(随机)
Heartbeat TimeoutLeader 必须续命50ms

随机化是解决“选票瓜分”的灵丹妙药。


3️⃣ 选主流程:4 步曲

  1. Follower 心跳超时 → 变成 Candidate
  2. 自增 Term,投自己一票
  3. 并发 RequestVote 给所有节点
  4. 收到过半选票 → 变成 Leader

任何时刻 最多只有一个 Leader(Election Safety),杜绝“脑裂”。


4️⃣ 日志复制:客户端写请求的一生

🚶‍♂️ Step by Step

Client → Leader → Log → AppendEntries RPC → Followers
           ↓
       majority ACK → Commit → Apply → 返回 Client
  • Commit = 日志被复制到 过半节点,不可回滚
  • Apply = 真正写进状态机(KV 存储)

只有 当前 Term 的日志 才能被“计数”提交,历史日志顺带提交。
Raft 永远不会直接 commit 前任班长的日志。


5️⃣ 异常场景大赏

场景是否安全解释
Leader 宕机剩余节点重新选举
Follower 宕机Leader 无限重试,直到恢复
网络分区(奇数节点)少数派自动变为只读
网络分区(偶数节点)⚠️可能平票,需人工调整奇数节点

奇数个节点是部署铁律:3、5、7 …


6️⃣ 面试 8 问 8 答(背下来)

问题一句话答案
Raft 与 Paxos 最大区别?Raft 把问题拆成 3 个独立子问题。
节点状态?Follower / Candidate / Leader,任期递增。
何时触发选举?Follower 心跳超时。
如何避免选票瓜分?随机超时 + 先来先投 + 奇数节点。
什么叫 committed?日志被复制到过半节点。
Leader 宕机怎么办?剩余节点重新选举,新 Leader 一定包含最新已提交日志。
会出现双 Leader 吗?会,但旧 Leader 无法复制到过半节点,实际不可写。
如何防止“幽灵日志”?只提交当前 Term 的日志,顺带提交旧日志。

7️⃣ 10 行伪代码,手撕日志复制

// Leader 侧
for cmd from client:
    log.append(cmd)               // 本地追加
    parallel_send AppendEntries    // 并发给所有 Follower
    wait majority ack              // 阻塞在 Fiber 里
    commit_index = len(log)        // 更新提交点
    apply_to_state_machine()       // 写 KV
    reply_client("OK")

Follower 侧更简单:按顺序 apply 即可。


8️⃣ 3 分钟动画 + 源码


9️⃣ 一图总结(长按保存)

在这里插入图片描述


🔚 写在最后

Raft 用一句话总结:“先选班长,再抄作业,过半算交齐。”
把它转发到技术群,下次面试官问“Raft 怎么选主?”你甩这张图就够了。

👍 点个赞 + 在看,下期带你读更多源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlgoCraft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值