一个 saga 管理跨越多个服务的业务事务,作为一系列 本地事务。如果某一步失败,saga 会执行 补偿事务 来撤销之前的步骤——没有分布式回滚。
为什么不使用分布式事务?
跨服务的两阶段提交速度慢、锁定资源并耦合可用性。Saga 提供最终一致性,无需分布式锁。
Choreography(事件驱动)
服务对彼此的事件做出反应;没有中央协调器。
text
Order ─OrderCreated→ Payment ─PaymentDone→ Inventory ─Reserved→ Shipping
◀───────── (on failure, each emits a compensating event) ─────────
Orchestration(中央协调器)
协调器告诉每个服务做什么,并对结果做出反应。
