PACELC 定理
某团队在使用 Cassandra 构建实时数据服务时遇到了问题。
团队选择了 Cassandra 的 AP 模式(可用性优先),实现了高吞吐的数据写入。但产品经理反馈:用户写入数据后,查询有时会返回旧数据。
团队开始加长同步等待时间,系统延迟从 10ms 飙升到 200ms,吞吐量大幅下降。
这是一个典型的 "即使没有分区,也需要取舍" 的问题。这正是 PACELC 定理要回答的问题。
【架构权衡】 CAP 定理只考虑了分区(P)情况下一致性(C)和可用性(A)的取舍。但 PACELC 定理告诉我们:即使没有发生分区,系统在正常运行时,也需要在延迟(L)和一致性(E)之间做出取舍。
一、问题背景
1.1 CAP 的盲点
CAP 的盲点示例:
1.2 PACELC 的定义
【架构权衡】 PACELC 不是推翻 CAP,而是在 CAP 的基础上增加了一个维度:延迟。它告诉我们,分布式系统的取舍是一个二维问题,不是 CAP 的三元悖论。
二、方案对比
2.1 PACELC 的四种组合
2.2 常见系统的 PACELC 定位
2.3 PACELC 的实际案例
案例一:Cassandra 的 EL 路径
案例二:ZooKeeper 的 EC 路径
【架构权衡】 PACELC 告诉我们:没有"又快又一致"的系统。如果你的业务既要求低延迟又要求强一致,你需要在架构上做额外的设计(如:读写分离、分层缓存)。
三、工程实践
3.1 根据业务选择 PACELC 路径
3.2 延迟和一致性的实际权衡
3.3 读写分离的 PACELC 分析
四、工程代价评估
五、落地 Checklist
- 业务分析:识别业务的延迟要求和一致性要求
- 路径选择:根据业务选择 PA 还是 PC
- 延迟监控:监控读写延迟,发现问题及时调整
- 一致性监控:监控不一致率,设置告警
- 降级设计:设计从高一致到低一致的降级路径
- 测试验证:在压测中验证不同负载下的延迟和一致性行为
六、面试总结
PACELC 是 CAP 的扩展,它告诉我们:
- 分区时:选择 PA 或 PC
- 正常时:选择 EL 或 EC
理解 PACELC,才能理解为什么"没有又快又一致的分布式系统"。