题目重点:用具体读写执行解释一致性和可用性的冲突,不把 CAP 当三个产品标签。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 讨论分区模型下的线性一致性与每个非故障节点请求终止的可用性;不混同数据库ACID。
解题路线
- 两个副本之间网络断开,客户端分别访问两侧。如果双方都立即接受不协调写并读本地值,可能无法表现为单一实时顺序。
- 为了线性一致,一侧或不能形成所需协调的请求要等待/拒绝;为了分区期间双方继续服务,允许陈旧与冲突,需要后续合并。
- P不是正常网络永不坏的开关,而是需要应对的故障条件。没有分区时仍有延迟与一致性权衡,CAP不提供完整性能模型。
- 按操作选择合同:余额扣减与配置读取风险不同,同系统可对部分请求拒绝、部分读缓存;说明陈旧上界/冲突政策。
手动走一遍
写A=1完成后,断开侧B读取0,若读发生在完成后且应线性一致,该执行不满足合同。多数侧继续写、少数侧拒绝可维护规定一致性,但少数侧请求不是CAP定义的全可用。
规模与取舍
不输出统一复杂度;跨区域协调带来网络延迟与故障等待,必须对业务操作给出SLO和降级合同。
易错点与追问
容易失分的边界
- 三选二用于所有正常运行情况。
- availability等于99.99%SLA。
- CAP的C等于所有ACID约束。
继续深挖
- 分区恢复如何修复冲突?
- 为什么只谈CAP不足解释正常时的读延迟?
