加载中...
Saga 是一种在微服务架构下实现长事务与最终一致性的模式。它将一个跨多个服务的大事务拆分为一系列本地事务,每步都配有对应的补偿操作;若某一步失败,则按相反顺序执行补偿,回滚已完成的步骤,从而避免使用分布式两阶段提交。

| 类型 | 分布式事务模式 |
| 提出者 | Garcia-Molina、Salem |
| 提出时间 | 1987 年 |
| 一致性 | 最终一致性 |
| 两种形态 | 编排式、编制式 |
Saga 模式是一种管理分布式长事务的设计模式,用于在多个微服务之间维护数据一致性。它把一个大事务分解为若干个可以独立提交的本地事务,并为每个本地事务定义补偿事务,以便在流程中途失败时撤销已产生的影响。该概念最早由 Hector Garcia-Molina 与 Kenneth Salem 于 1987 年提出。
在单体应用中,跨表操作可以依赖数据库的 ACID 事务保证一致性。但在微服务架构下,数据分散在不同服务与数据库中,传统的两阶段提交因锁资源时间长、可用性差而难以适用。Saga 通过一系列本地事务加补偿的方式,换取更高的可用性和更弱但可接受的最终一致性。
Saga 的执行流程为 T1、T2、……、Tn 一连串本地事务;若在 Ti 处失败,则依次执行 Ci-1、……、C1 等补偿事务来回滚。它有两种常见的协调方式:
Saga 广泛用于电商下单(扣库存、扣余额、生成订单)、旅行预订(订机票、订酒店、租车)等跨服务的业务流程。当业务能接受短暂的中间不一致、并且每一步都能设计出合理的补偿逻辑时,它是替代分布式事务的主流方案。
问:补偿事务能保证完全回滚吗?答:补偿是业务层面的逆操作(如已发货则退货),并非数据库回滚,某些副作用无法真正撤销,只能尽量抵消,因此需要谨慎设计。
问:Saga 和两阶段提交怎么选?答:强一致且事务短小可用两阶段提交;跨服务、长流程、看重可用性则更适合 Saga 并接受最终一致性。

| 类型 | 分布式事务模式 |
| 提出者 | Garcia-Molina、Salem |
| 提出时间 | 1987 年 |
| 一致性 | 最终一致性 |
| 两种形态 | 编排式、编制式 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧