Seata-TCC模式
入侵式的
TCC也是二阶段提交协议,全称为Try-Confirm-Cancel,即资源预留、确认操作、取消操作
1.Try: 对业务资源的检查并预留;
2.Confirm: 对业务处理进行提交,即commit 操作,只要 Try 成功,那么该步装一定成功
3.Cancel: 对业务处理进行取消,即回滚操作,该步骤会对 Try 预留的资源进行释放
TCC和AT区别
AT模式基于支持本地ACID事务的关系型数据库
一阶段 prepare行为: 在本地事务中,一并提交业务数据更新和相应回滚日志记录
二阶段commit 行为:马上成功结束,自动异步批量清理回滚日志
二阶段 rollback 行为: 通过回滚日志,自动生成补偿操作,完成数据回滚
相应的,TCC模式,不依赖于底层数据资源的事务支持:
一阶段 prepare 行为: 调用自定义的 prepare 逻辑。
二阶段commit 行为:调用自定义的commit 逻辑
二阶段rollback 行为:调用自定义的rollback逻辑
所谓TCC模式,是指支持把自定义的分支事务纳入到全局事务的管理中
Seata-Saga模式
Saga定义
Saga模式采用了长事务的概念,将原子操作拆分为多个子事务,并通过补偿机制保证整个事务的一致性。
Saga是一种比较传统的解决方案,传统的业务系统中通常会提供冲正服务,当正向服务执行失败时,业务会自动调用冲正服务,将已经发生变化的数据再修改回去,这种解决思想与Saga相同。
Saga组成
Saga由一个个独立的本地事务组成(T1,T2,T3...),并且每个独立的本地事务提供反向逻辑(C1,C2,C3...),反向逻辑是指正向节点发生的变化会滚回去,如T1将数据ID=1 变更为ID=2,则反向逻辑是将ID变更为ID=1
T3节点执行失败,则开始执行冲正服务C2->C1。