1. etcd 的 Raft 一致性协议与 MVCC 多版本
请解释 etcd 的 Raft 一致性协议如何工作,以及 MVCC(多版本并发控制)机制如何实现键值历史版本管理?
- Raft 的 Leader 选举与日志复制
- 线性读写与 Raft
- MVCC 的 revision 与历史版本
etcd 使用 Raft 协议实现分布式一致性。Raft 将节点分为 Leader、Follower、Candidate,Leader 负责接收写请求并复制日志到 Follower,日志获得多数派确认后提交;Leader 通过心跳维持地位,Leader 故障时通过选举时间戳(election timeout)触发新选举。MVCC 是 etcd 的多版本机制:每个键值操作都产生一个全局递增的 revision(版本号),每次修改键时并不覆盖旧值,而是保留旧版本,通过 (key, revision) 三元组记录历史。客户端可用指定 revision 读取历史数据,或使用 version 计数当前值的修改次数。MVCC 与 Watch 紧密结合:Watch 依靠 revision 进行增量观察,客户端记录 last revision,后续只推送该 revision 之后的变化。
Raft 提供了"日志一致 + 线性一致"的基石,MVCC 在一致存储之上提供了历史版本与增量监听能力,这使 etcd 天然适合做配置中心、服务发现和协调原语。MVCC 的根是 revision 全局单调递增,所有读写和 Watch 都以此为准。