Saga 与补偿操作:分布式流程的核心区别
副标题 / 摘要 Saga 是一组本地事务的流程编排,补偿是失败后的回滚手段。本文解释二者关系与工程实践。 目标读者 设计跨服务流程的工程师 需要理解一致性策略的团队 架构与技术负责人 背景 / 动机 分布式系统不适合强一致长事务。 Saga 通过补偿机制实现“最终一致”。 核心概念 Saga:多个本地事务组成的流程 补偿操作:失败后执行的逆操作 编排/协作:流程驱动方式 实践指南 / 步骤 为每个步骤设计补偿动作 明确补偿是否可逆与可重复 记录流程状态与执行日志 处理部分失败与重试 可运行示例 # 订单流程:创建 -> 扣库存 -> 失败补偿 state = [] def step(name): state.append(name) def compensate(name): print("compensate:", name) def run(): try: step("create_order") step("reserve_stock") raise RuntimeError("fail") except Exception: while state: compensate(state.pop()) if __name__ == "__main__": run() 解释与原理 Saga 描述的是完整流程,而补偿是其中一部分“逆向操作”。 没有补偿,Saga 就无法在失败时回滚。 ...