加载中...
解决微服务跨服务事务一致性的架构模式,把一个长事务拆成多个有补偿操作的本地事务序列。任何一步失败都触发已完成步骤的补偿操作,以最终一致性代替传统的两阶段提交。1987 年 Garcia-Molina 论文提出。

| 类型 | 分布式事务模式 |
| 论文来源 | Garcia-Molina & Salem,ACM SIGMOD 1987 |
| 典型框架 | Seata(阿里开源), Apache ServiceComb Saga, Eventuate Tram |
编排式(Choreography):没有中心协调者,每个服务完成步骤后发布事件,下一个服务订阅事件并继续;失败时发布补偿事件触发链路回滚。去中心化,耦合低,但整体流程难以追踪,出问题时很难一眼看出执行到哪一步。
指挥式(Orchestration):有一个 Saga 编排者(状态机服务),负责依次调用各服务并跟踪状态,失败时主动调用补偿接口。流程集中,调试监控更容易,但编排者本身成为瓶颈。电商下单(下单->扣库存->扣积分->发货)是经典案例,任何一步失败按反向顺序补偿。[1]
两阶段提交(2PC)要求分布式数据库支持 XA 协议,锁定资源时间长,协调者故障会导致参与者永远等待。Saga 用补偿逻辑代替回滚,资源锁定时间短,不依赖 XA,适合跨多个微服务(各自有独立数据库)的场景,代价是中间状态对外可见,业务需要容忍短暂的不一致窗口。

| 类型 | 分布式事务模式 |
| 论文来源 | Garcia-Molina & Salem,ACM SIGMOD 1987 |
| 典型框架 | Seata(阿里开源), Apache ServiceComb Saga, Eventuate Tram |
登录 后参与讨论
暂无讨论,来发表第一条评论吧