Alibaba Seata 学习日记(Saga模式详解)

Alibaba Seata 学习日记(Saga模式详解)

Saga 模式

Alibaba Seata 学习日记(Saga模式详解)_第1张图片

Saga 模式的实现,是长事务解决方案。

Saga 是一种补充协议,在 Saga 模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务。需要用户根据业务场景实现正向操作和逆向回滚操作。

Alibaba Seata 学习日记(Saga模式详解)_第2张图片

如图:T1~T3都是正向的业务流程,都对应着一个冲正逆向操作C1~C3

分布式事务执行过程中,一次执行个参与者的正向操作,如果所有正常操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。

Saga 正向服务于补偿服务也需要业务开发者实现。因此是业务入侵的。

Saga 模式下分布式事务通常是由事件驱动的,各个参与者之间是异步的,Saga 模式是一种长事务解决方案。

Saga 模式使用场景

Saga 模式适用于业务流程长且需要保证事务最终一致性的业务系统,Saga 模式一阶段就会提交本地事务、无锁、长流程情况下可以保证性能。

事务参与者可能是其他公司的服务或者是遗留系统的服务,无法进行改造和提供 TCC 要求的接口,可以使用 Saga 模式。

Sga 的优势是:

  • 一阶段提交本地数据库事务,无锁,高性能;
  • 参与者可以采用事务驱动异步执行,高吞吐
  • 补偿服务即正向服务的"反向",易于理解,易于实现;

缺点: Saga 模式由于一阶段已经提交本地数据库事务,且没有进行"预留"动作,所以不能保证隔离性,后续会讲到缺乏隔离性的应对措施。

于 TCC 实践经验相同的是, Saga 模式中,每个事务参与者的冲正、逆向操作,需要支持:

  • 空补偿: 逆向操作早于正向操作时
  • 防悬挂控制:空补偿后要拒绝正向操作
  • 幂等

Alibaba Seata 学习日记(Saga模式详解)_第3张图片

reference

https://www.bilibili.com/video/BV1uJ411h7px?from=search&seid=17886022887642019485

https://www.it235.com/%E9%AB%98%E7%BA%A7%E6%A1%86%E6%9E%B6/SpringCloudAlibaba/seata.html#%E4%BA%8B%E5%8A%A1

你可能感兴趣的:(分布式,java,分布式)