分布式事务概述 #
一、分布式事务问题 #
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