外观主题
阅读语言

Saga 编排 —— 长事务拆步走,失败按原路补偿

软件 本站软件 2小时前
https://yxp.hk/p/8f0jOA

📦 开源仓库:learn_saga_orchestration · 纯 Python 标准库 · 学习演示项目

跨服务的长业务流程没法用一个数据库事务包住,分布式锁和 2PC 又太重。Saga 的思路:把长流程拆成一串本地事务步骤,每一步都配一个反向补偿动作;哪步失败了,就把已经完成的步骤倒序补偿回来——要么全做完,要么全撤干净,绝不留半成品。

核心思路

  创建订单 → 扣余额 → 扣库存
     │         │         │
     │         │         └─ 失败 → 补偿:回滚库存
     │         └─ 补偿:退余额
     └─ 补偿:取消订单
  • 每一步只提交自己的本地事务,全程没有全局锁
  • 失败触发倒序补偿链,逐步撤销已完成步骤
  • 终态只有两种:committed 或 compensated

为什么值得学

  • 不需要分布式事务:每个服务管好自己的提交
  • 可用性优先:允许中间状态存在,只要保证可撤销
  • 天生适合跨服务流程:下单、支付、库存、发货

演示场景

  1. 全部成功 → 订单创建、余额扣减、库存扣减,状态 committed
  2. 库存失败 → 倒序补偿:退余额、取消订单
  3. 余额早早失败 → 只需补偿订单创建(取消)

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_saga_orchestration,欢迎 Star 与提 Issue。