加载中...
补偿事务是一种在分布式系统中撤销已完成操作的模式:当一个由多步组成的业务流程中途失败时,通过为每个已成功步骤执行相应的补偿操作,把系统恢复到近似一致的状态,以替代传统的分布式回滚。

| 中文名 | 补偿事务 |
| 外文名 | Compensating Transaction |
| 类别 | 分布式事务模式 |
| 一致性模型 | 最终一致性 |
| 关键要求 | 幂等、可重试 |
| 相关模式 | Saga 模式 |
补偿事务(Compensating Transaction)是一种用于处理长时间、跨服务业务流程失败的模式:当一系列已提交的操作因后续步骤失败而需要撤销时,针对每个已完成的操作执行一个逻辑上相反的补偿操作,使系统回到业务上可接受的一致状态。
在微服务或跨越多个数据存储的场景中,难以使用传统数据库那样的原子回滚,因为各步骤往往已分别提交、被其他系统观察到,无法简单撤销。补偿事务采用最终一致而非严格 ACID 的思路:承认操作已经发生,通过执行明确定义的反向动作来抵消其效果,例如已扣款则退款、已预订则取消预订、已发货则发起退货。它是 Saga 模式实现回滚的基础手段。
补偿事务常见于订单履约、旅行预订(机票加酒店加租车的组合)、支付与库存扣减、跨行转账等长事务流程,是 Saga 编排与协同两种实现中处理失败的核心机制。它也用于工作流引擎、业务流程管理系统中定义可回退的长流程。
问:补偿事务能保证强一致性吗?答:不能。它提供的是最终一致性,过程中系统可能短暂处于不一致的中间态,补偿完成后才恢复到一致;需要强一致的场景应尽量避免跨服务长事务。
问:如果补偿操作也失败了怎么办?答:通常将补偿设计为可重试并配合重试与死信队列;对反复失败的情形需要告警并引入人工介入,确保不遗留悬挂的中间状态。

| 中文名 | 补偿事务 |
| 外文名 | Compensating Transaction |
| 类别 | 分布式事务模式 |
| 一致性模型 | 最终一致性 |
| 关键要求 | 幂等、可重试 |
| 相关模式 | Saga 模式 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧