这篇文档是 HTML 长文档通道的示例。源文件是 content/posts/raft/index.html,正文只保留片段,不带 html、head、body 外壳。
为什么需要共识
单机系统只需要一个写入者;一旦复制到多台机器,就必须在“部分节点不可用”的前提下仍然对同一顺序达成一致。Raft 把这个问题拆成三块:选举、日志复制和安全性。
节点只有三种状态:Follower、Candidate、Leader。任意时刻最多一个 Leader,任期号单调递增。
选举流程
- Follower 在选举超时后转为 Candidate,任期加一,并向其他节点拉票。
- 获得多数票的 Candidate 成为 Leader,开始发送心跳。
- 如果收到任期更大的消息,立即退回 Follower。
| 状态 | 行为 |
|---|---|
| Follower | 被动接收日志与心跳 |
| Candidate | 发起投票,等待多数派 |
| Leader | 接收写入并复制日志 |
日志复制
Leader 把客户端请求追加为日志条目,并行发送给所有 Follower。多数节点确认后条目即为已提交,随后在状态机上按序应用。
AppendEntries(term, leaderId, prevLogIndex, prevLogTerm, entries, leaderCommit)Follower 只有在 prevLogIndex 与 prevLogTerm 都匹配时才接受新条目,否则拒绝并要求 Leader 回退。
与 RSS 的关系
这篇文档会以全文进入 /rss.xml,正文 HTML 做 XML 转义后放入 content:encoded。订阅器里保留语义结构,但不保证站内样式;页面样式只作用于站点本身。