分布式事务:
在分布式系统中,如果一个业务需要多个服务合作完成,而且每一个服务都有事务,多个事务必须同时成功或失败,这样的事务就是分布式事务,其中的每个服务的事务就是一个分支事务,整个业务称作全局事务,比如在一个商城分布式系统中的下单操作,设计到订单服务,购物车服务,库存服务,当生成订单的时候,如果库存服务中库存不足,但是创建订单的时候订单服务和购物车服务无法感知到,所以会下单成功,删除购物车成功。但是库存扣减失败,造成事务的不一致性。
分布式事务解决方案:
要解决这个问题就要让各个微服务知道彼此的状态,所以引入一个事务协调者,各个子事务就能感知到彼此的执行状态。
seata:
TM:事务管理器,定义全局事务的范围(也就是可以理解为方法的入口,出口),开始结束全局事务(向TC报告),提交或回滚全局事务。
RM:资源管理器,管理分支事务,与TC交谈以注册分支事务,和报告分支事务的状态。
RM:资源管理器,管理分支事务,与TC交谈以注册分支事务,和报告分支事务的状态。
RM:资源管理器,管理分支事务,与TC交谈以注册分支事务,和报告分支事务的状态。
...
TC:事务协调者,维护全局事务和分支事务的状态,协调全局事务的提交或回滚。
XA模式:
第一阶段的工作是:RM注册分支事务到TC,执行分支业务SQL但不提交,报告执行状态到Tc;
第二阶段的工作是:TC检测各分支事务事务执行状态;RM接收TC指令,提交或回滚事务;
(如果都成功就会通知所有的RM提交事务)(如果都失败就会通知所有的RM回滚事务);
AT模式:
第一阶段:RM注册分支事务,记录undo-log,执行业务SQL并提交,报告事务的状态;
第二阶段:提交RM的工作,删除undo-log;或者回滚RM的工作,根据undo-log恢复数据到更新前;