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 |