目录

一、Saga 模式是什么?
Saga 模式是一种在分布式系统中实现数据一致性的架构模式。 它将一个大的、跨多个微服务的事务,拆分成一系列有序的本地事务(Local Transaction), 每个本地事务完成后,都会触发下一个事务。 如果其中一个事务失败,就会执行对应的补偿事务(Compensating Transaction)来回滚之前的操作。
一句话总结:
Saga = “一连串的本地事务 + 每步都有补偿操作” 来实现最终一致性。
二、Saga 模式的核心思想
| 概念 | 说明 |
| 全局事务 | 需要跨多个微服务的一次完整业务操作(如订单创建) |
| 本地事务 | 每个服务独立完成的操作(如扣库存、扣余额、生成订单) |
| 补偿事务 | 对应本地事务的“撤销操作”(如回滚库存、退款) |
| 最终一致性 | 不保证强一致(如两阶段提交),但能确保系统最终达到一致状态 |
三、Saga 模式的两种实现方式
1️⃣ 协调器(Orchestration)模式
-
有一个Saga 协调器(Orchestrator)负责控制整个事务流程。
-
协调器调用每个服务的本地事务;
-
若有失败,则协调器依次调用补偿逻辑。
流程示例(电商下单)
-
OrderService创建订单(Pending 状态) -
协调器调用
InventoryService扣减库存 -
调用
PaymentService扣款 -
若付款失败 → 调用
InventoryService回滚库存 →OrderService取消订单
优点:
-
流程集中,易于监控和控制
-
错误处理清晰
缺点:
-
协调器成为单点瓶颈
-
灵活性稍差(所有逻辑都在协调器)
2️⃣ 编排(Choreography)模式
-
没有中央协调器;
-
每个服务通过事件驱动(Event-driven)来自主响应;
-
每个服务在完成本地事务后,会发布事件;
-
下一个服务监听该事件并执行自己的事务;
-
若失败,发布补偿事件。
流程示例:
-
OrderService→ 发布OrderCreated事件 -
InventoryService监听后 → 扣库存 → 发布InventoryReserved -
PaymentService监听后 → 扣款 → 发布PaymentCompleted -
若
PaymentService扣款失败 → 发布PaymentFailed→ 各服务收到事件执行回滚
优点:
-
去中心化,扩展性高
-
更贴合事件驱动架构(Kafka / RabbitMQ)
缺点:
-
调试复杂,事件链长
-
错误难追踪(需要分布式追踪系统)
四、Saga 模式的典型应用场景
| 场景 | 示例 |
| 电商系统 | 下单 → 扣库存 → 支付 → 发货 |
| 银行转账 | 扣款 → 汇入 → 记录流水 |
| 机票预定系统 | 预定航班 → 扣费 → 确认出票 |

最低0.47元/天 解锁文章
4052

被折叠的 条评论
为什么被折叠?



