seata执行分布式事务底层原理

一.seata是什么?能干什么?
     Senta是一款开源的分布式事务解决方案,致力于在微服务架构下提供简单易用的分布式事务服务.

二.大致理论.
1.组成:
      在使用Senta处理分布式事务时,有一个典型的1+3模型,也就是1个事务id,还有事务管理,事务协调,资源管理三个组件.

  1. Transaction ID:事务id,全局唯一
  2. Transaction Coordinator(TC) :负责事务协调,维护全局事务运行的状态,控制全局事务的提交或回滚(可以理解为运行的seata服务).
  3. Transaction Manager™ :事务管理,控制事务的边界,开启一个全局事务(谁加了GlobalTransactional注解,谁就是TM)
  4. Resource Manager(RM) :资源管理,和数据库进行交互,控制每一个分支事务,汇报状态,驱动本地事务的提交和回滚.

2.使用前提:
     基于支持本地 ACID 事务的关系型数据库。
      Java 应用,通过 JDBC 访问数据库。
3.处理事务流程:
其实就是两个阶段提交的变形
一阶段:
      (1)生成前镜像(就是保存原先的数据)
      (2)执行sql
      (3)生成后镜像(保存更改后的数据)
      (4)将前后镜像的数据以及业务sql相关信息保存到UNDO.LOG日志中
      (5)提交前,向TC注册分支,申请该更新记录的全局锁
      (6)进行事务提交,将业务数据的更新和前面生成的UNDO.LOG一并提交
      (7)将本地事务的提交结果上报给TC.
二阶段:
  如果需要回滚:
      (1)在UNDO.LOG中找到响应的记录,将当前数据与日志中后镜像的数据进行比较,如果发生变动,则表明有其他全局事务做了修改,这个处理措施需要根据配置的不同,进行相关的操作.
      (2)生成并执行对应的回滚语句.
      (3)提交事务,并将事务提交结果给到TC.
  如果需要提交:
      (1)收到TC的分支提交请求,将请求放到一个异步队列中,马上返回提交成功的结果给TC.
      (2)异步队列中的请求,将会异步和批量的删除UNDO.LOG日志中的记录.

其实这里的思想也类似于CAS,乐观锁的操作,保存前后值来确保数据的总体正确性.

seata官网地址:
      https://seata.io/zh-cn/docs/overview/what-is-seata.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员bling

义父,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值