网络技术

分布式系统一致性:从 CAP 理论到 Raft 共识算法

✎ -- 字 🕐 -- 分钟
字号

CAP 理论精解

一个分布式系统最多同时满足三者之二:

  • C (Consistency):所有节点同一时刻看到相同数据
  • A (Availability):每个请求都能得到响应(不保证是最新数据)
  • P (Partition Tolerance):网络分区时系统仍能工作

实际系统中,P 必须保证(网络不可靠),因此是 CP 或 AP 的选择:

  • CP 系统:ZooKeeper、etcd、HBase——放弃部分可用性保一致性
  • AP 系统:Cassandra、DynamoDB——接受短暂不一致保可用性

Raft 共识算法核心

# Raft 三大角色
Leader    ← 处理所有客户端请求,同步日志
Follower  ← 被动接收,选举时变 Candidate
Candidate ← 发起选举,争取成为 Leader

# 选举过程 (Term-based)
1. Follower 超时 → 变 Candidate,Term++
2. 向所有节点发送 RequestVote
3. 获得多数票(majority) → 成为 Leader,发送心跳

日志复制

1. Client → Leader: SET x=5
2. Leader 追加日志条目 [Term=3, Index=8, cmd="SET x=5"]
3. Leader → Followers: AppendEntries
4. 多数(majority)确认 → Leader 提交(commit)
5. Leader → Client: OK
6. Leader → Followers: 该条目已提交,应用到状态机

实践中的一致性模型

模型描述代表系统
强一致性写后读立即可见etcd, ZooKeeper
顺序一致性操作按全局顺序可见ZooKeeper
因果一致性有因果关系的操作有序DynamoDB
最终一致性最终会一致,无时间保证DNS, Cassandra