用于建模支持失败回滚的原子事务的常用设计模式有哪些?
多步骤原子事务场景的通用实现方案
公认推荐设计模式
工业界针对该场景已经有两类经过大规模落地验证的标准设计模式:
1. Saga模式(补偿事务模式)
这是适用范围最广的实现方案,核心逻辑是为每个正向执行步骤预定义对应的补偿撤销逻辑,执行失败时反向调用补偿操作回到初始状态。
适用场景:步骤间没有强依赖、业务允许短暂中间状态的场景,比如跨服务业务流程、批量数据操作等。
2. TCC模式(Try-Confirm-Cancel)
分为三个阶段:
- Try阶段:完成所有业务资源的预检查和预占用
- Confirm阶段:所有Try步骤成功后,执行实际的业务提交操作,该阶段不做任何业务校验,默认一定会成功
- Cancel阶段:任意Try步骤失败时,释放所有已预占的资源
适用场景:对一致性要求更高、可以拆分出预占逻辑的场景,比如支付、库存扣减等核心交易链路。
标准落地流程
不管用哪种模式,核心执行逻辑都遵循以下规则:
- 每个步骤的正向和回滚操作都需要保证幂等性,避免重试、重复调用导致数据异常
- 每执行成功一个步骤,立刻持久化该步骤的执行记录和回滚所需的参数,避免服务宕机后丢失回滚上下文
- 某一步执行失败后,立刻终止正向流程,按反向顺序执行所有已完成步骤的回滚操作
- 不可回滚的操作(比如对外推送消息、发送短信)必须放到所有步骤的最后,等所有可回滚步骤都执行成功后再调用
最简代码实现参考(伪代码)
def atomic_task_executor(task_list: list): executed_tasks = [] for task in task_list: try: task.run() executed_tasks.append(task) except Exception as e: # 反向执行补偿 for executed in reversed(executed_tasks): executed.rollback() return False return True
内容的提问来源于stack exchange,提问作者KSSTAR
相关产品推荐
相关产品推荐

