CAP 定理与一致性谱系

kp-025 · 分布式与NoSQL进阶约 25 分钟已校对

前置知识点

前置:

相关知识点

相关:

学习进度:

一句话定义

CAP 定理证明:网络分区(P)发生时,系统只能在一致性(C)与可用性(A)之间二选一;工程实践因此展开为一条「一致性谱系」——从线性一致到最终一致,按业务代价选择落点,而不是喊口号「选 CP 还是 AP」。

为什么重要

前置知识

kp-018(跨节点提交)、kp-023(复制与延迟)。

核心概念

原理与机制

Gilbert-Lynch 证明的直觉:分区发生时,若系统仍要响应读(A),各侧只能用本地数据(放弃 C);若坚持全局一致(C),跨分区操作必须等待或拒绝(放弃 A)。关键澄清有三:其一,正常(无分区)运行时 C 与 A 可兼得,CAP 只约束分区时刻;其二,「选择」不是一次性开关,而是按数据域/操作粒度决策——支付走强一致、点赞走最终一致;其三,最终一致不等于「随便读旧值」,可叠加会话保证(读己之写、单调读)修复最常见的用户侧违和。Quorum 机制 N=3, R=2, W=2 使读写必有重叠副本,读到「最新已确认」值;但 Quorum ≠ 线性一致(并发写排序、时钟漂移仍可破坏全局序),Dynamo 用向量时钟/last-write-wins 收敛冲突,LWW 依时钟定胜负、时钟异常即丢更新。

实例或案例

电商多活架构的数据域分级:库存与支付走「CP 域」(单写主 + 同步复制,分区时拒绝服务,宁可不可用不可超卖);商品详情走「AP 域」(异步多主复制,分区时各区可售可读,恢复后收敛);购物车走「会话保证域」(按用户哈希单主,保证读己之写)。同一系统三种档位并存——这就是 CAP 的工程化读法。Quorum 案例:N=3, W=2, R=2,一个副本宕机仍可读写;两个宕机则降级为读旧值(保持可用)或拒绝读(保持一致),由业务开关决定。

常见误区

自测题

  1. 为什么说「CAP 中 P 不可放弃」? 答:现实网络必然出现消息丢失与延迟(分区态),放弃 P 的系统在第一次网络抖动时整体失效,不具备工程意义。
  2. R + W > N 能否保证线性一致? 答:不能。Quorum 只保证读写集有交集、能读到已确认值;并发写的全局排序、时钟偏差仍可能破坏线性一致,需共识协议(kp-026)加持。

公式或模型

Quorum 交集条件:R + W > N;写可用性 ≈ C(N, W) 副本组合存活概率,读新鲜性随 R 增大而增强、读延迟随 R 增大而升高——三个参数是延迟/一致性滑杆。

图示

线性一致 因果一致 读己之写 最终一致 延迟最高 延迟最低
一致性谱系:越向左越接近单机语义、跨节点代价越高,按业务域选档

直观类比

一家连锁店的价签管理:线性一致像总部每变一次价、全部门店实时同步后才允许交易(最准最慢);最终一致像每晚总部把最新价目广播下去(白天各店可能卖旧价);读己之写像「你自己刚改过的价签你自己必能看到」——大部分纠纷靠这条小保证就能平息。

与其他知识点的关系

kp-023 的三种复制模式即谱系上的三个锚点;kp-026 的共识是把 C 档做到极致的机制;kp-030 的选型框架把「数据域一致性档位」作为第一层决策。

延伸阅读