知识卡片
Saga拆长事务为多个带补偿的短事务
内容
Saga模式(又称长时间运行事务,Garcia-Molina等提出)主张长事务应拆为多个短事务协调,焦点不在时间长短,而在是否牵涉多个分布式服务。它也是补偿,但本质异于TCC:Saga无Try阶段、不预留冻结资源,每个参与服务从自身看就是本地服务、直接操作本地事务资源,故可能一个成功一个失败,需逆操作补偿。为减少对领域模型的影响,参与服务应由应用服务承担,正向与逆向补偿都定义在应用服务;领域模型即使不考虑分布式事务,也应提供完整的互逆行为(支付与退款)。发散:Saga与TCC的分水岭是有没有Try预留。
参考来源
- 位置:《解构领域驱动设计》第18章《领域驱动设计的战略考量》18.4.3(源文件:_epub-src/OEBPS/031.xhtml)
- 结论依据:原文定义Saga拆长事务为短事务、无Try阶段、直接操作本地资源需补偿,并强调参与服务由应用服务承担、领域行为互逆。
- 原始内容:Saga模式没有Try阶段,不需要预留或冻结资源……就可以直接操作该服务内的事务资源。这就可能导致一个本地服务操作成功、另一个本地服务操作失败的情况……需要执行操作的逆操作来完成补偿。