分布式事务概述 #

一、分布式事务问题 #

1.1 什么是分布式事务 #

分布式事务是指事务参与者分布在不同的服务或数据库中的事务。

text
本地事务:
┌─────────────────────────────────────────┐
│              单个数据库                  │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐ │
│  │ 操作A   │  │ 操作B   │  │ 操作C   │ │
│  └─────────┘  └─────────┘  └─────────┘ │
│              ACID保证                    │
└─────────────────────────────────────────┘

分布式事务:
┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│   服务A     │  │   服务B     │  │   服务C     │
│  数据库A    │  │  数据库B    │  │  数据库C    │
└─────────────┘  └─────────────┘  └─────────────┘
        如何保证一致性?

1.2 分布式事务场景 #

场景 说明
跨库事务 多个数据库操作
跨服务事务 多个服务调用
混合事务 数据库+消息队列

二、理论基础 #

2.1 CAP理论 #

特性 说明
Consistency 一致性
Availability 可用性
Partition Tolerance 分区容错性

2.2 BASE理论 #

特性 说明
Basically Available 基本可用
Soft State 软状态
Eventually Consistent 最终一致性

三、解决方案 #

3.1 两阶段提交(2PC) #

text
准备阶段:
协调者 ──► 参与者A: 准备
协调者 ──► 参与者B: 准备

提交阶段:
协调者 ──► 参与者A: 提交
协调者 ──► 参与者B: 提交

3.2 TCC模式 #

text
Try: 尝试执行
Confirm: 确认执行
Cancel: 取消执行

3.3 本地消息表 #

text
1. 本地事务写入业务数据和消息
2. 定时任务扫描消息表
3. 发送消息到消费者
4. 消费者处理成功后删除消息

3.4 事务消息 #

text
1. 发送半消息
2. 执行本地事务
3. 提交/回滚消息

四、方案对比 #

方案 一致性 性能 复杂度
2PC 强一致
TCC 最终一致
本地消息表 最终一致
事务消息 最终一致

五、总结 #

要点 说明
CAP 只能满足两个
BASE 最终一致性
方案选择 根据场景选择

接下来让我们学习 Seata AT模式

最后更新:2026-03-28