← 中文资源

简体中文版本

CAP 定理

网络分区期间分布式系统必须在一致性与可用性之间选择。CAP 是狭窄的故障保证,不是数据库的通用排名。

阅读英文原文

三个属性

  • 一致性(C) — 每次读取都看到最近写入或返回错误,即线性化含义。
  • 可用性(A) — 每个发往非故障节点的请求都收到非错误响应,但不保证包含最新写入。
  • 分区容忍(P) — 节点间消息丢失或延迟时系统仍继续运行。

网络分区期间,节点无法同时保证最新值和响应所有请求:要么拒绝部分请求以保持一致,要么返回可能陈旧的数据以保持可用。

工程师实际选择什么

发生分区
├── 拒绝无法保持一致的读写 -> CP 行为
└── 提供可能陈旧的数据     -> AP 行为

支付账本可能对扣款选择 CP;商品信息流可能选择 AP 并稍后对账。选择可以按端点,而不是按数据库。

何时使用这个视角

在设计故障行为时使用 CAP:副本无法通信时系统应该怎么做?与 PACELC 相比,CAP 忽略正常运行时延迟与一致性的取舍;PACELC 用 else 分支补上这一分析。与 ACID 相比,CAP 关注分区期间的分布式复制,而不是单节点事务保证。

陷阱

CAP 标签不能说明系统是否支持读己之写、收敛需要多久或冲突写入如何处理。应直接测试分区行为或阅读厂商的一致性文档。不要用 CAP 宣称某个数据库普遍优于另一个。