seata,搞清楚它,美团在向你招手!(我个人开辟的皇帝理解法,偷者必究!原出处java炒粉)

seata为用户提供了,at,tcc,saga和xa模式,他有很多模式,就是一款开源的分布式事框架。at模式就是2pc模式

最官方的三个器官

  1. Transaction Coordinator(TC):事务协调器,它是独立的中间件,需要独立部署运行,它维护全局事务的运行状态,接收TM指令发起全局事务的提交与回滚,负责与RM通信协调各各分支事务的提交或回滚。 相当于是一个软件需要单独部署
  2. Transaction Manager (TM):事务管理器, TM需要嵌入应用程序中工作,它负责开启一个全局事务,并最终 向TC发起全局提交或全局回滚的指令。
  3. Resource Manager (RM):控制分支事务, 负责分支注册、状态汇报,并接收事务协调器TC的指令, 驱动 分支(本地)事务的提交和回滚。

我理解的

TC:事务协调器,它是独立的中间件,需要独立部署。它是个软件,需要单独部署。

TM:事务管理器,需要嵌入到代码中,开启全局事务,最终向事务协调器发起全局提交或者回滚

RM:资源管理器,控制分支事务,接受Tc的指令。

个人感觉TC像个皇帝,它是特殊,最核心,需要单独部署,负责TM发起全局提交或者回滚,同时控制Rm各分支事务提交回滚。

TM则有点像太监,比如要开启全局事务,要提交,要回滚,只能申请,最终决定权在皇上那里。

而RM则更像是远离朝廷的地方政府,拥有一定权利控制分支,但是最终还是要听皇帝(TC)的,要接受它的指令

我们以积分服务为案例,讲解seata的at模式也是2pc模式,面试问你seata的流程,把它搞懂就行了。

TM向tc老大,申请开启全局事务,说我们要在四川省,重庆市搞大动作!tc(老大同意后),给它了指令,xid也就是全局事务的id代号(西部大开发!)。第二步,用户服务也会注册分支事务,并且要把分支事务纳入全局事务的管理。第三步,用户服务提交数据,就正常将数据存入数据库,并提交分支事务,向undolog表插入一条数据,就是操作前的原数据。然后会把xid传给积分服务,积分服务告诉tc,我也是分支事务,注册分支事务,纳入xid全局事务中。积分服务和用户服务一样,执行本地事务,执行SQL,也要向undolog插入一条原始数据。如果两个服务都成功了,协调器通知参与者,你们都成功了,提交事务吧,最好删除undolog中的数据。如果某一方事务,事务协调器,通知服务回滚!通过undolog,回滚后,删除undolog数据。反正怎么都要删除undolog数据!苦笑 !

总结版:

  1. 用户服务的TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID。
  2. 用户服务的RM向TC注册分支事务,该分支事务在用户服务执行新增用户逻辑,并将其纳入XID对应 全局事务的管辖。
  3. 用户服务执行分支事务,向用户表插入一条记录。记录undolog(数据库的一张表)
  4. 逻辑执行到远程调用积分服务时(XID在微服务调用链路的,上下文中传播)。积分服务的RM向TC 注册分支事务,该分支事务执行增加积分的逻辑,并将其纳入XID对应全局事务的管辖。
  5. 积分服务执行分支事务,向积分记录表插入一条记录,执行完毕后,返回用户服务。记录undolog
  6. 如果都是成功的执行第二阶级提交,不做数据库操作,需要分支事务删除undolog
  7. 如果失败 执行第二阶级提交,根据undolog日志做回滚
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值