SpringCloud分布式事务模式:AT、TCC、SAGA
1.AT:AutoTransaction
一种无需入侵代码的自动分布式事务模式
原理
共分两个阶段:
阶段一:
解析sql语句,创建undo_log,其内保存的是反sql语句(反sql语句:执行sql语句后,得到新数据,再执行反sql语句回到原来数据),执行sql语句。
阶段二:
判断事务有误报错:
若有,则执行反sql语句。
若无,删除undo_log即可。
图示如下
一二阶段的提交由seata完成。
AT的全局事务与局部事务
TM:Transaction Manager事务管理器
全局事务管理者,标注@GlobalTransactional的方法所在的服务。
RM:Resource Manager资源管理
负责本地事务的注册、提交和回滚。每个服务都是一个RM,
TC:Transaction Coordinate事务协调器
全局事务协调器,TM、RM启动时要像TC注册。
把控整个事务
AT全局锁
一个业务可能有多个本地事务,故需要全局锁。
2.TCC
Try-Confirm-Cancel
Try:实现业务检查和资源预留
Confirm:业务确认提交
Cancel:业务回滚
如订单
业务检查:检查库存是否充足
资源预留:
订单新增,添加一个状态为未提交
所需库存进行一个标注冻结,冻结后库存不能被其他业务所占用。
可以说TCC是AT的第二阶段,同时TCC需要我们自己实现代码
3.SAGA模式
上时间执行的事务
SAGA两个阶段:一、正向事务。二、补偿事务
SAGA三种事务类型:
可补偿性事务
关键性事务
可重复性事务
来自: https://blog.csdn.net/qq_24950043/article/details/124515274