Skip to content

P82 强一致还是保可用?Base 理论又是什么? ​

面试题:什么是 CAP 定理?什么是 BASE 理论?分布式系统怎么取舍?

1. CAP 定理 ​

分布式系统最多只能同时满足两个:

  • C(Consistency)一致性:所有节点同一时刻看到同一份数据;
  • A(Availability)可用性:每个请求都能得到响应(不保证数据最新);
  • P(Partition tolerance)分区容错性:网络分区(断网/节点失联)时系统仍能工作。

网络分区在分布式环境必然发生,所以 P 必须选,实际是在 CP 和 AP 之间二选一:

  • CP:牺牲可用性保证一致(ZooKeeper、etcd);
  • AP:保证可用,数据最终一致(Eureka、大多数电商场景)。

2. 什么是 BASE 理论(对 AP 的扩展) ​

text
B: Basically Available(基本可用)
A: Soft State(软状态)
E: Eventually Consistent(最终一致)
  • 基本可用:系统出问题时,允许损失部分功能/响应变慢,但整体可用(如降级、限流);
  • 软状态:允许数据存在中间状态(不同节点数据暂时不一致);
  • 最终一致:经过一段时间(无新写入),所有副本最终达成一致。

3. BASE 与 ACID 的关系 ​

  • ACID 是单机/强一致模型(原子性、一致性、隔离性、持久性);
  • BASE 是分布式弱一致模型:放弃强一致,换取高可用和性能,通过补偿/重试达到最终一致。

4. 实际应用 ​

场景选择
支付/转账/库存强扣减强一致(DB 事务、分布式锁、CP)
订单状态/用户资料最终一致(MQ + 重试 + 对账)
注册中心Eureka(AP)vs ZK(CP)各有所取
缓存与 DBCache-Aside 最终一致

5. 加分点 ​

  • 说清"CAP 中的 C 是线性一致性,BASE 的最终一致是放宽版";
  • 提到实现最终一致的手段:消息队列、幂等、重试、对账补偿、本地消息表/事务消息;
  • 追问"能不能同时满足 C 和 A":无分区时可以(单机),分布式下不行;
  • 强调 CAP 是"网络分区时"的取舍,不是随时三选二。

一句话总结 ​

CAP:分布式下 P 必选,在强一致(CP)和高可用(AP)间取舍;BASE 是 AP 的落地理论——基本可用 + 软状态 + 最终一致,用 MQ、幂等、重试、对账把一致性从"强"放宽到"最终",换取可用性和性能。

基于 VitePress 重建