分布式柔性事务之Saga详解
- 起源 - 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, 得以完成 数据隔离性: 业务层控制并发 在应用层加锁 应用层预先冻结资源等 恢复方式: 向后恢复:补偿所有已完成的事务,如果任一子事务失败 向前恢复:重试失败的事务,假设每个子事务最终都会成功 从Saga模型的上述定义中,Saga 模型可以满足事务的三个特性: 原子性:Saga 协调器协调事务链中的本地事务要么全部提交,要么全部回滚。 一致性:Saga 事务可以实现最终一致性。 持久性:基于本地事务,所以这个特性可以很好实现