分布式知识梳理(2)

分布式知识梳理(2)

作者:没有四次元口袋的蓝胖

日期:2026-08-07

标签:Java, 分布式, CAP, BASE, 分布式理论


分布式系统两大理论基础。核心掌握:CAP 三选二、BASE 最终一致性思想。


一、CAP 定理

1.1 什么是 CAP?

CAP 是分布式系统设计时必须权衡的三个特性:

特性 英文 含义
C Consistency 一致性:所有节点数据一致
A Availability 可用性:每个请求都能得到响应
P Partition Tolerance 分区容错性:网络分区时系统仍能运行

1.2 CAP 三选二

核心结论:分布式系统最多同时满足两个。

复制代码
CAP = C + A + P(最多选两个)

实际选择:
- CP:一致性 + 分区容错(牺牲可用性)
- AP:可用性 + 分区容错(牺牲一致性)
- CA:一致性 + 可用性(牺牲分区容错,单机系统)

1.3 为什么 P 必须保证?

分区容错性是分布式系统的基本要求。

网络分区(Partition):集群中部分节点之间无法通信。

复制代码
正常情况:
Node1 ←→ Node2 ←→ Node3(互相通信)

网络分区:
Node1 ←→ Node2    Node3
(Node1、Node2 与 Node3 之间无法通信)

结论:分布式系统必然存在网络分区,所以 P 必须保证,只能在 C 和 A 之间选择。

1.4 CP vs AP

CP 系统(一致性 + 分区容错)

特点:网络分区时,为了保证一致性,部分请求会被拒绝。

代表

  • Zookeeper

  • HBase

  • Redis Cluster(部分场景)

    网络分区时:
    客户端 → Node1(主节点,在分区 A)
    客户端 → Node3(从节点,在分区 B)

    CP 系统行为:
    Node1 正常处理请求
    Node3 拒绝写入(保证一致性)

AP 系统(可用性 + 分区容错)

特点:网络分区时,为了保证可用性,允许返回旧数据。

代表

  • Eureka

  • Cassandra

  • DynamoDB

    网络分区时:
    客户端 → Node1(主节点,在分区 A)
    客户端 → Node3(从节点,在分区 B)

    AP 系统行为:
    Node1 正常处理请求
    Node3 也接受写入(但最终会同步)

1.5 CAP 对比表

维度 CP AP
一致性 强一致 最终一致
可用性 分区时不可用 始终可用
响应时间 可能较长(等待同步) 快速响应
适用场景 金融、支付(数据必须准确) 电商、社交(允许短暂不一致)

1.6 实际案例分析

案例一:Zookeeper(CP)

复制代码
选举 Leader 期间(网络分区):
- Leader 在分区 A → 分区 A 正常服务
- 分区 B 无法选举 Leader → 拒绝服务
- 保证一致性,牺牲可用性

案例二:Eureka(AP)

复制代码
网络分区期间:
- 各节点独立工作,互相注册
- 可能返回旧数据(其他节点的新注册信息)
- 保证可用性,牺牲一致性

二、BASE 理论

2.1 什么是 BASE?

BASE 是 CAP 中 AP 的延伸,是对最终一致性的描述:

特性 英文 含义
BA Basically Available 基本可用
S Soft State 软状态
E Eventually Consistent 最终一致性

2.2 基本可用(Basically Available)

含义:系统出现故障时,允许损失部分可用性。

表现

  • 响应时间延长(正常 100ms → 异常 500ms)
  • 降级服务(返回默认值或缓存数据)
java 复制代码
// 降级示例
try {
    result = getUserFromRemoteService(userId);
} catch (Exception e) {
    // 服务不可用,返回缓存数据
    result = getUserFromCache(userId);
}

2.3 软状态(Soft State)

含义:允许系统中的数据存在中间状态,且不影响系统整体可用性。

表现

  • 数据同步有延迟

  • 存在中间状态

    订单支付状态:
    UNPAID → PAYING → PAID

    软状态(中间状态)

2.4 最终一致性(Eventually Consistent)

含义:系统保证最终数据一致,但不保证实时一致。

与强一致对比

类型 含义 场景
强一致 写入后立即一致 金融转账
弱一致 一段时间后可能一致 缓存更新
最终一致 保证最终会一致 电商订单、社交动态

2.5 最终一致性的实现方式

方式 说明 示例
读时修复 读取时检查并修复数据 DynamoDB
写时修复 写入时同步修复相关数据 Cassandra
异步补偿 定时任务或消息队列补偿 电商订单同步
版本向量 用版本号判断数据新旧 Cassandra

三、CAP 与 BASE 的关系

3.1 核心思想

  • CAP:分布式系统最多满足两个特性(P 必须保证)
  • BASE:是对 CAP 中 AP 方案的延伸,接受最终一致性

3.2 如何选择?

复制代码
需要强一致(如金融) → CP 系统(Zookeeper)
可以接受最终一致(如电商) → AP 系统(Eureka) + BASE 理论

3.3 实际案例

电商订单场景

复制代码
用户下单:
1. 订单系统创建订单(主库)
2. 发送 MQ 消息
3. 库存系统异步扣减库存
4. 积分系统异步增加积分

设计选择:
- 主流程:订单创建必须强一致(CP)
- 异步流程:库存、积分最终一致即可(AP + BASE)

四、一致性模型对比

4.1 强一致性

含义:写入后立即对所有读请求可见。

实现

  • 同步复制(所有节点写入成功才返回)
  • Paxos / Raft 算法

适用:金融、支付

4.2 弱一致性

含义:写入后不保证立即一致,可能读取到旧数据。

实现

  • 异步复制
  • 缓存更新延迟

适用:缓存系统

4.3 最终一致性

含义:弱一致性的特例,保证最终会一致。

实现

  • 消息队列异步补偿
  • 定时任务对账

适用:电商、社交


🗺️ 思维导图速览

复制代码
分布式理论基础
├── CAP 定理
│   ├── C:一致性(所有节点数据一致)
│   ├── A:可用性(每个请求都能得到响应)
│   ├── P:分区容错性(网络分区时仍能运行)
│   ├── P 必须保证 → 只能选 C 或 A
│   ├── CP:Zookeeper(强一致,分区时拒绝服务)
│   └── AP:Eureka(最终一致,始终可用)
├── BASE 理论(AP 的延伸)
│   ├── 基本可用(允许损失部分可用性)
│   ├── 软状态(允许中间状态)
│   └── 最终一致性(保证最终会一致)
└── 一致性模型
    ├── 强一致(写入后立即一致)
    ├── 弱一致(可能读取旧数据)
    └── 最终一致(保证最终一致)

📝 写在最后

学习建议

  1. CAP 要记住三选二:P 必须保证,只能在 C 和 A 之间选择
  2. CP vs AP 要知道代表系统:CP 是 Zookeeper,AP 是 Eureka
  3. BASE 是 AP 的延伸:基本可用、软状态、最终一致性
  4. 实际场景要知道怎么选择:金融用 CP,电商用 AP + BASE

面试回答模板

Q:说说 CAP 定理?

CAP 是分布式系统三个特性:一致性(C)、可用性(A)、分区容错性(P)。由于网络分区是必然存在的,P 必须保证,所以只能在 C 和 A 之间选择。CP 系统保证一致性,网络分区时拒绝服务,如 Zookeeper;AP 系统保证可用性,允许返回旧数据,如 Eureka。

Q:什么是 BASE 理论?

BASE 是对 CAP 中 AP 方案的延伸,包含基本可用(允许损失部分可用性)、软状态(允许数据存在中间状态)、最终一致性(保证数据最终会一致)。比如电商订单系统,主流程强一致,库存和积分通过 MQ 异步处理,最终一致即可。

Q:CAP 和 BASE 的关系?

CAP 是分布式系统的理论基础,说明最多满足两个特性(P 必须保证);BASE 是对 CAP 中 AP 方案的延伸,接受最终一致性。实际应用中,金融系统选择 CP 保证强一致,电商系统选择 AP + BASE 接受最终一致。

相关推荐
小白酷爱学习9 小时前
鸿蒙OS的开发语言与工具链:如何驾驭全新开发生态!
分布式·华为·架构·harmonyos
BD_Marathon13 小时前
Hadoop组成
大数据·hadoop·分布式
Databuff16 小时前
使用Pinpoint作分布式链路跟踪系统
运维·分布式·运维开发·开源软件
传感器与混合集成电路16 小时前
分布式光纤测温DTS系统:ZDTS-P2000与X1000参数对比及找漏监测应用
分布式·数据分析
传感器与混合集成电路16 小时前
分布式光纤声波DAS测井系统:0.1Hz低频检测、0.1m采样间隔与6066m实井对比
分布式
MetaLite16 小时前
SpringBoot整合Caffeine-集群本地缓存如何保证分布式一致性
spring boot·分布式·缓存
肠畔码农1 天前
深入分布式事务内核:从 2PC/XA 到 Seata AT 模式的架构演进与权衡
分布式·架构
ai小陈2 天前
PyTorch多GPU分布式训练实战:从单卡脚本迁移到DDP
服务器·人工智能·pytorch·分布式·深度学习·ai·gpu算力
伟大的大威2 天前
三台 DGX Spark 部署 DeepSeek V4 Flash NVFP4:从零到可用教程
大数据·分布式·spark
阿里云云原生2 天前
企业级实时数据平台建设:利用存算分离 Kafka 实现低成本、高可靠入湖
分布式·阿里云·云原生·kafka