Saga 模式:分布式事务一致性解决方案

目录

一、Saga 模式是什么?

二、Saga 模式的核心思想

三、Saga 模式的两种实现方式

1️⃣ 协调器(Orchestration)模式

2️⃣ 编排(Choreography)模式

四、Saga 模式的典型应用场景

五、实现方式与技术栈

六、示例流程

七、Saga 与其他分布式事务的比较

八、设计建议

示例:电商订单系统 Saga 模式架构图

1.Saga 模式架构逻辑说明

系统背景:

Saga 架构组件说明

2.架构图(Saga Orchestrator 模式)

3.Saga 补偿流程示意图(失败回滚)

4.架构扩展建议(可应用于 IoT 智能锁 / 设备控制)

5.Saga 日志存储结构示例(SQL)


一、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 模式的典型应用场景

场景 示例
电商系统 下单 → 扣库存 → 支付 → 发货
银行转账 扣款 → 汇入 → 记录流水
机票预定系统 预定航班 → 扣费 → 确认出票
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

34号树洞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值