- 起源 -
Saga模型起源于1987年 Hector Garcia-Molina,Kenneth Salem 发表的论文《Sagas》,是分布式事务相关概念最早出现的。
Saga模型是把一个分布式事务拆分为多个本地事务,每个本地事务都有相应的执行模块和补偿模块(对应TCC中的Confirm和Cancel),当Saga事务中任意一个本地事务出错时,可以通过调用相关的补偿方法恢复之前的事务,达到事务最终一致性。
- 组成 -
-
Saga模型主要分:
-
一串子事务(本地事务)的事务链
-
每个Saga子事务Tn, 都有对应的补偿定义 Cn用于撤销Tn造成的结果
-
每个Tn都没有“预留”动作,直接提交到库。
-
-
执行顺序:
-
子事务序列 T1, T2, …, Tn得以完成 (最佳情况)
-
或者序列 T1, T2, …, Tj, Cj-1, …, C2, C1, 0 < j < n, 得以完成
-
-
数据隔离性:
-
业务层控制并发
-
在应用层加锁
-
应用层预先冻结资源等
-
-
恢复方式:
-
向后恢复:补偿所有已完成的事务,如果任一子事务失败
-
向前恢复:重试失败的事务,假设每个子事务最终都会成功
-