news 2026/6/16 9:45:52

CAP 定理:为什么不能同时实现 C、A、P?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CAP 定理:为什么不能同时实现 C、A、P?

一、CAP 是什么?

字母含义解释
C**Consistency(一致性)所有节点同一时间看到的数据完全一致
A**Availability(可用性)每个请求都能得到响应(不保证数据最新)
P**Partition tolerance(分区容错)网络分区(节点间通信失败)时系统仍能继续工作

二、为什么不能同时实现?

"因为 P(分区容错)是分布式系统的前提条件**。网络分区一定可能发生(断网、丢包、节点宕机)所以你必须在 C 和 A 之间二选一——这就是 CAP 的本质。"

2.1分布式系统必选 P

为什么 P 必选?

  • 分布式系统有多个节点
  • 节点间通过网络通信
  • 网络一定可能断(网线被挖断、交换机故障、DNS 故障)
  • 只要是分布式系统,P 就必须满足
2.2P 满足后,C 和 A 只能二选一

假设场景MySQL 主从集群,主从之间网络断了

主库 (192.168.1.1) ← 网络断 → 从库 (192.168.1.2) ↓ ↓ 写数据 w=1 没收到

情况 1:选 C(一致性)——拒绝写

主库:检测到从库没收到 主库:拒绝写入,返回错误 主库:保证数据一致(主从都是空) ↓ ❌ 可用性没了(用户写不进去)

情况 2:选 A(可用性)——继续写

主库:不管从库,先写入主库 主库:返回写入成功 ↓ ✅ 可用性有了 ❌ 一致性没了(主库有 w=1,从库没有)

**所以 P 满足后,C 和 A 是互斥的——你必须牺牲一个

三、CAP 三选二的 3 种组合

组合含义实际系统项目
CA(放弃 P)单点系统,不是分布式传统单机数据库(MySQL 单机)单库测试
CP(放弃 A)强一致 + 分区容错可用性差ZooKeeper、etcd、HBase关键功能(强一致)
AP(放弃 C)可用性 + 分区容错最终一致Eureka、Cassandra、Redis报表(高可用)

⚠️ 关键点

  • CA 不是真正的分布式(单机就满足,不分 P)
  • 真实分布式只能在 CP 和 AP 之间选

四、CAP 的"扩展"理解

4.1CAP 不是三选一,而是"权衡"

老哥注意

  • CAP 不是绝对的——不是非黑即白
  • 大部分系统在C 和 A 之间做权衡(不是完全牺牲
  • 比如:ZooKeeper 标榜 CP,但实际写入失败后还会重试不是完全不可用
4.2实际系统的 CAP 表现
系统CAP实际表现
EurekaAP节点挂了服务还能用(不一致但可用
Nacos 临时实例AP同 Eureka
Nacos 非临时实例CP网络断后不剔除(保证一致)
ZooKeeperCP选举时不可用(保证一致)
Redis ClusterAP主从切换时短暂不可用
MySQL 主从AP主从延迟(最终一致
MongoDBCP单机模式可 CA,集群模式 CP
HBaseCP强一致(金融级)

五、记忆口诀

"P 必选,C 和 A 二选一"

"网络一定会断,所以 P 必须满足"

"CP 强一致,AP 高可用"

"关键功能用 CP,普通报表用 AP"

"CA 不是分布式,是单机"

"ZooKeeper / HBase = CP,Eureka / Cassandra = AP"

六、深入理解:为什么 P 满足后 C 和 A 矛盾?

6.1 用"两阶段提交"举例

2PC 协调者 + 参与者模型

协调者 参与者 A 参与者 B ↓ ↓ ↓ prepare → vote yes vote yes ↓ ↓ ↓ 网络断(参与者 A 收到 commit,参与者 B 没收到) ↓ 协调者不知道参与者 B 的状态 ↓ ?

这时候,协调者只有 2 个选择

选 C(一致性)

协调者:宁可卡住也不提交 ↓ 协调者:等待网络恢复 ↓ 数据一致 ✅ 可用性 ❌(业务卡住)

选 A(可用性)

协调者:直接放弃等待,返回成功 ↓ 数据可能不一致(参与者 A 提交了,B 没提交) ↓ 数据一致 ❌ 可用性 ✅(业务继续)

**所以 P 满足后,C 和 A 在网络分区时一定是矛盾的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 9:42:54

2026年想换B2B系统,从“易用性+性价比”角度,求推荐

一、2026年B2B系统选型的核心挑战与趋势洞察随着全球产业链数字化转型的加速,2026年B2B系统已从单纯的交易工具升级为企业供应链协同的核心枢纽。中国B2B电商交易规模突破45万亿元的市场背景下,企业对系统的需求正从"功能满足"转向"价值创…

作者头像 李华
网站建设 2026/6/16 9:41:32

准备NCA-GENL认证的一些心得体会

作为一门资深IT人员,这几年随着AI技术的蓬勃发展,越发觉得自己所掌握的知识和技术的不足,随着生成式人工智能(Generative AI)和大型语言模型(LLMs)在软件开发、商业运营及职业发展中的广泛应用,…

作者头像 李华
网站建设 2026/6/16 9:40:57

4.HCIP OSPF域内路由计算

OSPF域内路由计算 一、域内路由计算概述 1.1 路由计算的基本过程 OSPF(Open Shortest Path First,开放式最短路径优先)是一种内部网关协议,用于在自治系统内部计算路由。与距离矢量协议不同,运行OSPF的设备不交互路由信…

作者头像 李华
网站建设 2026/6/16 9:38:03

RV1126B嵌入式AI视觉开发全攻略:从硬件选型到模型部署实战

1. 项目概述:为什么是RV1126B? 在嵌入式视觉和AIoT领域,选对一颗主控芯片,往往意味着项目成功了一大半。最近几年,从安防摄像头、人脸门禁到工业质检,对前端智能化的需求越来越迫切。大家不再满足于仅仅把视…

作者头像 李华
网站建设 2026/6/16 9:30:59

野火M3开发板实战指南:从GPIO到PWM的嵌入式底层驱动开发

1. 项目概述:野火M3开发板的“前世今生”提到“野火”,很多嵌入式领域的老玩家,尤其是从STM32入门的工程师,脑海里浮现的可能是那些经典的“霸道”、“指南者”系列开发板。但如果你在资料库里翻找,或者在一些老项目的…

作者头像 李华
网站建设 2026/6/16 9:28:51

【计算机毕业设计案例】基于 SpringBoot 的竞赛组队与团队运维管理系统设计 高校竞赛团队信息化管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华