分布式基础
分布式系统:多台机器协作,对外像一台。面试主线:挑战是什么、CAP 怎么权衡、一致性怎么选。
分布式三大挑战
| 挑战 | 说明 |
|---|---|
| 网络不可靠 | 延迟、丢包、分区(唯一确定的事是“不确定”) |
| 时钟不一致 | 各机器时钟漂移(不能用本地时间排序) |
| 状态分散 | 无共享内存,一致性靠协议 |
CAP 定理
CAP: 三选二, 但 P 是必选
- C(一致性):所有节点同时看到相同数据
- A(可用性):请求总能得到响应(不保证数据最新)
- P(分区容错):网络分区时系统仍工作
核心认知:网络分区必然发生,P 必须选。分区时在 C 和 A 之间二选一:
- CP:分区时拒绝服务保一致(etcd、ZooKeeper)
- AP:分区时继续服务,恢复后合并(Cassandra、DNS)
面试话术:“CAP 三选二”是误导,正确说法是分区时 C/A 二选一(无分区时三者可兼得)。
BASE
- Basically Available:基本可用(降级、限流)
- Soft state:状态可临时不一致
- Eventually consistent:最终一致
BASE 是 AP 路线的工程化:用最终一致换可用性。典型:缓存 + 数据库(见缓存一致性篇)、异步消息(见 MQ 篇)。
本分组地图
- 一致性模型:从强到弱的谱系
- Raft / Paxos / ZAB:共识协议
- 分布式 ID 与哈希:基础组件
面试追问
- CAP 是什么? 一致性、可用性、分区容错。分区必选,分区时 C/A 二选一
- CP 和 AP 例子? CP:etcd/ZK(分区拒写保一致);AP:Cassandra/DNS(分区继续服务)
- BASE 是什么? 基本可用 + 软状态 + 最终一致。AP 路线的工程实践
- 为什么 P 必选? 网络分区无法避免(不是“如果”是“何时”)。不选 P 的分布式不存在
- 最终一致怎么实现? 异步复制 + 重试 + 补偿(消息队列、对账)。见各篇