📦 开源仓库:learn_saga_orchestration · 纯 Python 标准库 · 学习演示项目
跨服务的长业务流程没法用一个数据库事务包住,分布式锁和 2PC 又太重。Saga 的思路:把长流程拆成一串本地事务步骤,每一步都配一个反向补偿动作;哪步失败了,就把已经完成的步骤倒序补偿回来——要么全做完,要么全撤干净,绝不留半成品。
核心思路
创建订单 → 扣余额 → 扣库存
│ │ │
│ │ └─ 失败 → 补偿:回滚库存
│ └─ 补偿:退余额
└─ 补偿:取消订单
- 每一步只提交自己的本地事务,全程没有全局锁
- 失败触发倒序补偿链,逐步撤销已完成步骤
- 终态只有两种:committed 或 compensated
为什么值得学
- 不需要分布式事务:每个服务管好自己的提交
- 可用性优先:允许中间状态存在,只要保证可撤销
- 天生适合跨服务流程:下单、支付、库存、发货
演示场景
- 全部成功 → 订单创建、余额扣减、库存扣减,状态 committed
- 库存失败 → 倒序补偿:退余额、取消订单
- 余额早早失败 → 只需补偿订单创建(取消)
运行
python run_all.py
纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_saga_orchestration,欢迎 Star 与提 Issue。