加载中...
CAP 定理由 Eric Brewer 于2000年提出,指出分布式系统无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三个属性,在网络分区发生时必须在一致性和可用性之间做出取舍。

| 提出者 | Eric Brewer,2000年 PODC 会议 |
| 正式证明 | Seth Gilbert & Nancy Lynch,2002年 |
| 延伸模型 | PACELC 定理 |
一致性(C):所有节点在同一时刻看到相同的数据,读操作总是返回最新的写入结果。
可用性(A):每个请求都能收到响应(不一定是最新数据),系统不会拒绝服务。
分区容错性(P):即使网络分区(部分节点之间的通信中断),系统仍然能继续运行。
在真实分布式环境中,网络分区是不可避免的(机房网络、跨机房延迟都可能导致分区),因此 P 几乎是必选的。问题变成了:网络分区发生时,选择保证一致性(拒绝服务而不返回可能过时的数据),还是保证可用性(返回可能不一致的数据)?[1]
选择 CP 的系统:ZooKeeper、HBase、Etcd——网络分区时宁可拒绝请求也不返回不一致的数据,适合需要强一致的分布式协调场景。
选择 AP 的系统:Cassandra、CouchDB、DynamoDB——分区时继续提供服务,允许不同节点的数据短暂不一致,通过最终一致性机制(向量时钟、冲突解决)在分区恢复后合并数据。
CAP 定理常被误解为三选二的长期权衡,实际上它描述的是网络分区这一特定故障场景下的选择。Brewer 本人后来也表示 CAP 定理过于简化,PACELC 模型(分区时选 P/A,无分区时选延迟/一致性)是更细致的描述框架。

| 提出者 | Eric Brewer,2000年 PODC 会议 |
| 正式证明 | Seth Gilbert & Nancy Lynch,2002年 |
| 延伸模型 | PACELC 定理 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧