跳转至

CAP 理论与 BASE 理论


类比:分布式系统的"不可能三角"

就像"便宜、好、快"三者只能选两个,分布式系统中"一致性、可用性、分区容错性"也只能同时满足两个。


CAP 三要素

flowchart TD
    CAP((CAP 理论))
    C[一致性 Consistency\n所有节点同一时刻\n看到相同数据]
    A[可用性 Availability\n每个请求都能\n收到响应(不保证最新)]
    P[分区容错性 Partition Tolerance\n网络分区时\n系统仍能运行]

    CAP --> C
    CAP --> A
    CAP --> P

    C -.->|三者只能\n同时满足两个| A
    A -.-> P
    P -.-> C

为什么 CAP 不可兼得?

分布式系统中,网络分区(P)是必然发生的(网络不可靠),因此实际上只能在 C 和 A 之间做取舍

  • CP 系统:保证一致性,牺牲可用性。网络分区时,宁可拒绝请求也不返回旧数据。
  • AP 系统:保证可用性,牺牲一致性。网络分区时,返回可能过时的数据,但不拒绝请求。

为什么 P 不可放弃:分布式系统中,网络分区是客观存在的(网络抖动、机器宕机),无法避免。因此 P 是前提,只能在 C 和 A 之间权衡。


常见系统的 CAP 选择

系统 类型 原因 适用场景
MySQL(单机) CA 单机无网络分区问题 单机 OLTP
MySQL(主从) CP 主库宕机时从库不提供写服务 需要强一致性的业务
ZooKeeper CP Leader 选举期间不可用,但数据强一致 配置中心、分布式锁
Redis Cluster AP 主节点宕机时副本可能数据不一致,但仍可用 缓存、会话存储
Eureka AP 节点间同步失败时仍提供服务发现 服务注册发现
Nacos CP/AP 可配置 注册中心用 AP,配置中心用 CP 微服务基础设施
Elasticsearch AP 优先可用性,允许短暂不一致 搜索、日志分析

BASE 理论(CAP 的工程实践)

BASE:Basically Available(基本可用)+ Soft State(软状态)+ Eventually Consistent(最终一致性)

核心思想:不追求强一致性,允许数据在一段时间内不一致,但最终会达到一致状态。

工程实践: - 订单支付后,库存扣减通过消息队列异步处理(最终一致) - 用 Redis 缓存用户信息,允许短暂与 DB 不一致(软状态)


面试高频问题

Q:CAP 理论中,为什么 P 不可放弃?

分布式系统中,网络分区是客观存在的(网络抖动、机器宕机),无法避免。因此 P 是前提,只能在 C 和 A 之间权衡。

Q:CAP 选型常见错误?

强一致性场景(如金融转账)选了 AP 系统,导致数据不一致。应根据业务需求选择 CP 或 AP。