Saga 模式的黄昏?2026 年分布式事务的新思路

微服务火了十年,Saga 几乎成了分布式事务的标准答案。但 2026 年,越来越多的架构师开始重新审视这个模式。

Saga 解决什么问题

单体时代,数据库事务(ACID)天然保证一致性。拆成微服务后,一个业务操作可能跨越多个服务和数据库——没有全局事务了。

Saga 的思路:把一个大事务拆成多个本地事务,每个本地事务有对应的补偿操作。失败了就逆序执行补偿。

订单服务 (创建订单) → 库存服务 (扣库存) → 支付服务 (扣款)
       ↓                    ↓                  ↓
   (取消订单) ←──────── (回滚库存) ←────── (退款)

Saga 的问题

用着用着就会发现几个坑:

1. 补偿逻辑不总是可行。 发出去的短信能撤回吗?送出去的优惠券能收回吗?很多业务操作是不可逆的。

2. 复杂度爆炸。 N 个服务的 Saga,失败场景的组合是指数级的。测试覆盖几乎没办法做全。

3. 中间状态暴露给用户。 订单创建了但库存还没扣,用户看到的是半成品——然后一刷新,订单没了。

4. 成为技术债放大器。 Saga 把业务逻辑跟协调逻辑耦合在一起。业务一变,补偿逻辑也得跟着改,而且是连锁反应。

2026 年的新思路:动态一致性边界

AxonIQ 提出了一个概念叫 Dynamic Consistency Boundaries(DCB)。

核心理念:不要在设计阶段就把数据归属定死。 传统领域驱动设计的 Aggregate 在定义的那一刻就固化了对业务的理解——而业务是会变的。

DCB 的思路是: - 通过事件流统一管理状态变化 - 一致性规则由「标签」动态定义,而非编译时确定 - 需要一致性时再决定边界,而不是提前切分

维度 Saga DCB
数据边界 编译时固化 运行时动态
补偿复杂度 高(指数级组合) 低(事件流天然可追溯)
业务变更成本 高(改协调逻辑) 低(改标签规则)
中间状态 用户可见 事件流隔离

不是说 Saga 就死了

Saga 在一些场景下仍然合适: - 服务数量少、流程简单(2-3 个步骤) - 补偿操作清晰且可靠(比如纯金融场景) - 团队对 Saga 框架已经很熟悉

但在复杂业务流程中,如果你发现 Saga 越写越痛苦——那不是你用得不好,是这个模式本身就有天花板。

2026 年,把「需要 Saga」当成一个 code smell 来看待,可能会让你少走很多弯路。


参考来源:

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。