CAP 与 BASE 的关系
面试中,我常问候选人一个问题:"CAP 定理和 BASE 理论是什么关系?"
80% 的候选人能说出 CAP 是"一致性、可用性、分区容错",BASE 是"基本可用、软状态、最终一致性"。
但当我追问:"为什么有了 CAP 还需要 BASE?BASE 具体是怎么从 CAP 推导出来的?"
能答上来的,不到 10%。
这个问题考察的不是名词记忆,而是对分布式系统设计的深层理解。
【架构权衡】 CAP 定理是一个理论模型,描述了分布式系统的约束边界。BASE 理论是 CAP 的工程化落地,提供了一条在"理论完美"和"工程可行"之间找到平衡的道路。理解两者的关系,才能真正理解分布式系统设计的核心矛盾。
一、核心问题 🔴
1.1 CAP 和 BASE 的关系
CAP 是"不可能三角",BASE 是"可行的方案"。
1.2 为什么 CAP 需要 BASE 来补充?
CAP 的局限性:
- 二元对立:系统要么是 CP 要么是 AP,但现实中很多系统可以在不同场景下有不同的表现
- 不考虑延迟:CAP 假设操作是原子的,但没考虑操作完成所需的时间
- 不考虑一致性强度:CAP 的 C 是"强一致",但没考虑"读己之所写"、"单调读"等不同级别的一致性
BASE 的贡献:
【架构权衡】 BASE 不是 CAP 的否定,而是 CAP 的补充。CAP 告诉我们"在理论上 C 和 A 不可兼得",BASE 告诉我们"在工程上可以通过折中设计出一个可用的系统"。
二、实际系统中的 CAP 和 BASE
2.1 常见分布式系统的 CAP 取舍
2.2 一个系统的不同模式
2.3 一致性级别的连续体
三、工程实践:CAP + BASE 的综合应用
3.1 混合策略:核心数据 CP + 非核心数据 AP
3.2 读写分离:写强一致 + 读最终一致
【架构权衡】 混合策略是工程中的常见做法。关键是识别哪些是"核心数据"、哪些是"非核心数据",然后分别采用不同的 CAP 策略。
3.3 降级策略:CP → AP 的动态切换
四、工程代价评估
五、落地 Checklist
- 数据分类:将系统数据分为核心和非核心
- 策略制定:为不同类型数据制定不同的 CAP 策略
- 降级设计:设计 CP → AP 的降级路径
- 监控部署:监控一致性延迟、冲突率、降级触发次数
- 测试验证:在压测中验证不同一致性级别下的系统行为
- 文档记录:记录各数据的一致性 SLA
六、面试总结
CAP 和 BASE 的关系,不是"谁取代谁",而是"理论指导实践"。
- CAP 是边界:告诉我们什么是不可能的
- BASE 是路径:告诉我们如何在边界内找到可行的方案
- 工程实践 是落地:根据业务场景,灵活选择 CP 或 AP,或两者的混合