分布式微服务事务--理论篇

TC(Transaction Coordinator): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;

TM(Transaction Manager): 事务管理器,控制全局事务的边界,并最终发起全局提交或者回滚的决议;

RM(Resource Manager): 资源管理器,负责分支注册, 状态汇报,驱动分支事务的提交和回滚。

seata分布式事务的执行过程:

1、A服务的TM向TC申请开启一个全局事务,用来管理所有的分支事务,驱动回滚或提交。TC会创建一个全局事务并且返回一个唯一的XID.

2、A服务的RM向TC注册分支事务,并将其纳入XID对应的全局事务中进行管辖。这就会有一个管辖的关系,如果一个分支事务出错我都可以通过TC通知到每一个分支事务并且让他们回滚。

3、A服务执行分支事务,向数据库做操作。

4、A服务开始远程调用B服务,此时XID会在微服务的一个调用链上进行传播。

5、B服务RM向TC注册分支事务,并将其纳入XID对应的全局事务的管辖。(注意,每一个微服务的RM在执行前都会先往TC注册一下分支服务,并纳入XID对应的管辖,这就保证了全局微服务事务的回滚提交一致性)

6、B服务执行分支事务,向数据库做操作

7、全局事务调用链执行完毕,TM根据有无异常向TC发起全局事务的提交或者回滚。

8、TC协调管辖之下的所有事务,决定是否会滚。

TM只是用来看是否有异常,有的话就提出回滚,最终决定和协调的还是TC。RM是各个微服务的事务,用来和资源交互,以及出现问题后提交。他是直接和数据库交互的东西。

Seata的整体机制:

整体分为两个阶段:

一阶段: 业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和链接资源。

二阶段:提交异步化,非常快速的完成。

               回滚通过一阶段的回滚日志进行反向补偿。

 

一阶段:

在一阶段,seata会拦截业务的sql,

1、解析sql语义,找到sql要更新的业务数据,在数据更新前,拍一个快照,将其保存下来,称为前快照。

2、执行sql语句

3、保存sql执行后的数据,将其保存为后快照,并最后生成行锁。

以上操作全在一个数据库事务中完成,保证了一阶段操作的原子性。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值