seata原理解析

在这里插入图片描述

  • TC:事务的协调者
    (1)接收客户端请求,接收开启全局事务请求、接收注册分支事务请求、接收分支事务状态、决定全局事务提交还是回滚 在这里插入图片描述
    (2) 决定全局事务提交还是回滚:
    微服务都有各自的本地事务状态,微服务本地事务提交或回滚之前,会wait住,然后上报本地事务状态(commit/rollback)到TC,TC根据所有微服务上报的事务状态,决定commit还是rollback(一般发现有一个微服务上报了robllback,那么会决定整个事务状态为rollback),然后发送到微服务中,微服务wait会被唤醒,然后进行本地事务commit/rollback(当然 commit/rollback是TC给的)

    • TM:事务的管理者
      (1) 发起全局事务
      TM往TC申请一个全局的事务XID,这个XID会传递到其他微服务中(如何传递呢,是框架决定的,如spring cloud,有个拦截器,http请求时会拦截,将其加入到请求头中)
      (2) 提交/回滚全局事务
      根据TC决定全局事务的状态,进行提交/回滚,你可以这样理解,TC是全局事务的决定者,而TM是全局事务的执行者

    • RM:资源管理者
      这里有二个proxy,DataSourceProxy和ConnectProxy,为什么会有这二个proxy呢?其实很好理解,我们试想本地事务也需要TC管理了,如何管理呢?我们知道要拿到本地事务,其实就需要拿到connect,拿到connect也需要DataSource,所以要重写DataSource和Connect。connect方法执行commit或rollback之前,需要wait,然后上传本地事务状态到TC。TC根据多个客户端上报的多个本地事务,决定是commit或者rollback,然后发送给TM,TM接收后,解connect wait,connect 在真正的提交/回滚

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值