分布式事务框架Seata原理分析 (三)总结 TM RM TC 您所在的位置:网站首页 tm和tr技能 分布式事务框架Seata原理分析 (三)总结 TM RM TC

分布式事务框架Seata原理分析 (三)总结 TM RM TC

2024-07-09 10:42| 来源: 网络整理| 查看: 265

综合前面两篇的研究: 分布式事务框架Seata原理分析 (一) 客户端 分布式事务框架Seata原理分析 (二) 服务端 的研究,对之前的分析研究在这里做一个总结。

这里讨论的都是基于Seata的AT模式 通过前面的研究,可以发现,seata的分布式事务是一种二阶段提交的方式,基于补偿式的事务回滚机制。 其流程可以概括为如下:

客户端在执行方法的时候,通过AOP会监测到代用@GlobalTransactional注解,生成代理代理在执行方法前,如果节点是LAUNCHER,即TM节点,则会向TC端发起开启全局事务的请求执行业务逻辑代码,业务逻辑代码中是通过ConnectionProxy来进行数据库相关操作,这是一个代理类,在执行事务前, 首先通过select ... for update获取当前执行前的数据记录并获取到本地锁, 在实际事务提交前,首先会向TC端注册分支事务(这里不区分节点类型,所有节点都会执行),TC端在注册节点分支事务的时候,会根据节点操作的数据记录生成全局锁·,注册分支事务成功后,TC端会返回XID,客户端(RM)首先将undolog持久化到本地数据库,然后提交本地事务,本地事务提交成功,一阶段事务成功结束,但是,这里注意,如果本地事务提交失败,但是节点不是TM,那么是不会发起全局事务回滚请求的,必须是发起方TM来发起回滚,可见调用方在调用其他节点服务返回失败的时候必须显示的抛出异常来让seata发起事务回滚如果上述业务逻辑执行没有出现问题,这时候通过AOP代理生产的代码在执行完业务代码之后就会开始提交全局事务,注意只有是LANUNCHER节点即TM节点才能发起全局事务提交的节点,其他节点该方法直接忽略跳过。在TC端(Seata服务端)接收到TM全局提交事务请求之后,首先会立即释放全局锁(所有分支),然后会将当前全局事务的GlobalSession更改状态写入到数据库中,并立马返回TM全局事务二阶段提交成功(注意这时候全局事务的提交其实并没有开始)TC端会有定时任务默认每隔1秒读取数据库中状态为提交全局事务的GlobalSession,然后向GlobalSession中每隔Branch发送提交全局事务请求RM端在收到TC端发送的全局事务提交请求后写入一个队列立马返回成功给TC端RM端类似TC端中也有定时任务,每隔1秒会定时从步骤6的队列中获取需要提交的事务,这里所谓的全局提交事务只是简单的把undo log删除,仅此而已。

而对于事务回滚而言,如果在上述第3步中执行业务逻辑代码发生异常了,通过AOP代捕获了异常,TM端会向TC端发送回滚请求(注意,只有TM端执行业务代码发生了异常才能发起全局回滚的请求,其他节点是没有权限回滚的),后续的步骤和全局提交事务处理流程大致是一样的,只不过一个是删除undo log,回滚是根据undo log,回滚了本地的记录。

通过上线的总结,我们发现这里要注意的一个点是:

不管是全局事务的提交还是全局事务的回滚只有TM端才有权限发起,这里也告诉我们,如果我们在TM端发起了服务调用,如果其他服务返回失败或者不期望的结果而要回滚数据时,一定要在TM端全局事务对应的方法中抛出异常,不要去捕获,在其他阶段抛出异常发起事务回滚是没有作用的,其他节点通过ConnectionProxy的回滚只能回滚自己的本地事务,无法发起全局事务回滚 Seata AT模式是一个两阶段提交的事务处理过程,在AT模式下,如果一阶段提交成功,这时候就表明了所有节点本地事务提交都完成了,Seata是不会在回滚事务的,所谓的二阶段提交,只不过是异步的删除各节点本地的undo log,如果一阶段发生异常,表明其中某个节点本地事务提交失败或者发起节点没有达到预期处理要回滚自己的事务,这时候所有的节点可能有的已经提交本地事务成功,有的还没有,这时候的二阶段回滚是通过undo log在本地又执行了一遍事务操作,将数据还原,这里的回滚并不是借助数据库实现,而是借助Seata实现的。

另外需要注意的是,如果针对一个记录的操作,其中一个服务使用了Seata的事务管理,另外一个服务没有(或者接入了Seata事务但是没有开启全局事务),那么在一阶段如果启用了全局事务的服务提交事务成功,但是另外全局事务节点失败导致回滚,这个时候如果未接入全局事务的服务操作了数据,则会发生数据不一致问题。

对几个概念说明下: TM transaction manager,全局事务的管理者,可以理解为全局调用的发起者,哪个服务发起了全局服务调用,这个服务就是TM RM Resouce Manager,可以简单理解为整个全局调用中,每个节点都是一个RM TC Tracnaction Coordinator 全局事务的协调者,可以理解为Seata Server



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有