seata原理解析

seata原理解析

  • TC:事务的协调者
    (1)接收客户端请求,接收开启全局事务请求、接收注册分支事务请求、接收分支事务状态、决定全局事务提交还是回滚 seata原理解析
    (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 在真正的提交/回滚

seata原理解析

seata原理解析