Saga模式——分布式事务的“事后补救法“
Saga模式——分布式事务的"事后补救法"
你有没有网购过?
生活场景:网购退货的"连环补救"
你在某宝下单买了:
- 一件T恤(¥99)
- 一条裤子(¥199)
- 一双鞋(¥399)
发现T恤有色差,决定退货。
商场模式(传统事务):
收银台:“不好意思,您这三件是一起买的,要退得三件一起退。”
网购模式(Saga模式):
- 申请T恤退款
- 退款成功,退¥99到你的账户
- 订单状态更新为"部分退款"
- 裤子和鞋正常发货
这就是Saga的核心思想:分布式系统里,不强求"要么全成功,要么全失败",而是"出了问题就补偿"。
技术故事:微服务的事务困境
假设你要实现一个"下单"功能,涉及三个微服务:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 订单服务 │────▶│ 库存服务 │────▶│ 支付服务 │ └─────────────┘ └─────────────┘ └─────────────┘- 订单服务:创建订单
- 库存服务:扣减