目录
1、事务的发起方(TM)会向事务协调器(TC)申请一个全局事务id,并保存
2、Seata会管理事务中所有相关的参与方的数据源,将数据操作之前和之后的镜像都保存在undo_log表中,这个表是seata框架规定的,方便提交(commit)或回滚(roll back)
3、事务的发起方(TM)会连同全局id一起通过RPC调用资源管理器(RM)中的方法
4、资源管理器(RM)接收到全局id,并运行指定的方法,将运行的状态同步到事务协调器(TC)
5、如果运行整体没有发生异常,发起方(TM)会通过事务协调器(TC)通知所有分支将本次事务所有对数据库的操作提交,反之如果任何一个RM运行发生异常,都会通知事务协调器(TC),由事务协调器(TC)通知所有分支,回滚数据中的数据,回滚时可以使用undo_log表中的数据来实现回滚。
缺点:AT模式运行有一个非常明显的条件,就是事务分支都必须是操作关系型数据库,但是如果一个事务中有操作例如Redis这样的非关系型数据库时就不能使用AT模式了
这个模式简单来说就是自己编写代码进行事务的提交和回滚,我们需要在各个分支业务逻辑层代码中编写一组三个方法(prepare\commit\rollback)。
prepare方法是无论事务成功与否都会运行的代码
commit当整体事务运行成功时运行的方法
rollback当整体事务运行失败是运行的方法
优点:虽然代码是自己写的,但是事务整体提交或回滚的机制仍然可用
缺点:每个业务都要编写3个方法来对应,代码冗余,代码侵入性强
SAGA模式的思想是编写一个类,当指定的事务发生问题时,运行SAGA编写的回滚类,这样编写代码不影响已经编写好的业务逻辑代码,一般用于修改已经编写完成的老代码。
缺点:是每个事务分支都要编写一个类来回滚业务,类数量多,开发量大
支持XA协议的数据库分布式事务,使用比较少