Saga模式:分布式事务的另一种解法

507 | Saga模式:分布式事务的另一种解法

场景引入

旅游团的故事:

你参加了一个旅游团:

  1. 导游打电话订酒店 ✓
  2. 导游打电话订机票 ✓
  3. 导游打电话订景点门票 ✗(满了!)

问题:酒店和机票已经订了,景点订不了,咋整?

解决方案:

  1. 打电话取消酒店
  2. 打电话退机票

这就是Saga的核心思想:用补偿代替回滚。


什么是Saga

Saga = 长事务的分解

Saga将一个长事务分解成多个短事务,每个短事务都有对应的补偿事务。

传统事务: A → B → C(全部成功或全部失败) Saga: A → B → C ↓ ↓ ↓ ┴ ┴ ┴ 补偿 补偿 补偿(任意一步失败时执行)

Saga vs 2PC

2PC(两阶段提交)

准备阶段: 协调者 → 所有参与者:"准备好了吗?" 参与者 → 协调者:"准备好了" / "没准备好" 提