1.架构图

TM(Transaction Manager)发送提交/回滚命令

这个模块是全局事务管理器,负责开启全局事务、提交全局事务、回滚全局事务、查询全局事务的状态、上报本地事务状态等。(TransactionManager.java)

RM(Resource Manager)执行提交/回滚操作

这个是资源管理器,负责分支事务注册、分支事务提交、分支事务回滚、锁查询等操作。(DefaultResourceManager.java)

TC (Transaction Coordinator) 用于接收提交/回滚

事务的协调者。也可以看做是 Seata-server,用于接收我们的事务的注册,提交和回滚

实际上RM才是真正处理事务操作的地方

2.AT模式

检查方法是否携带@GroblaTransaction注解,存在开启全局事务

2.1执行本地事务

1.开启全局事务,并且获取Xid全局事务id

2.执行本地事务的代码(business.excute),执行过程中被seata的代码监管

3. commitGlobalTransaction/rollbackGlobalTransaction 提交当前分支事务,回滚当前分支事务

4. 执行一些托管到 TransactionHookManager 中的 complete hook 逻辑

5. 复原由事务传递属性改变的当前事务的状态,比如 REQUIRES_NEW 传递属性就将当前分布式事务 xid 挪走了,这一步 就讲 xid 重新放到当前线程的上下文中。

 2.2执行全局commit

1. 关闭全局事务的状态,并将全局事务的状态设置为开始提交

2. 根据分布式事务的模式(AT、TCC、SAGA)选择是同步提交还是异步提交。目前只有 TCC 要求交操作是同步的,其它 的模式是异步提交全局事务。

3. 执行事务提交操作,异步则是将全局事务状态更新为 AsyncCommitting,更新到数据库,后面有由定时任务重新拉起, 执行同步提交事务;

同步提交事务,查询到当前全局事务下所有的分支事务,通知客户端提交分支事务,如果失败,则将状态更新为 CommitRetrying,由另一个线程反复重试,直到成功为止

         2.2执行全局rollback

2.3隔离级别

2.3.1写隔离

写隔离的实现基本步骤:

•一阶段本地事务提交前,需要确保先拿到全局锁 。

•拿不到全局锁,不能提交本地事务。

•拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁

2.3.1读隔离

Seata(AT 模式)的默认全局隔离级别是 读未提交(Read Uncommitted) 。

如果应用在特定场景下,必需要求全局的 读已提交 ,目前 Seata 的方式是通过 SELECT FOR UPDATE 语句的代理。这个代理在读之前,先去获取全局锁,获取不到则一直重试。

3.TCC模式

3.1基本原理

两阶段提交:

1. 执行 prepare 方法,锁定资源

2. 执行 Commit 或者 Rollback 方法,根据锁定资源的情况决定是提交事务还是回滚事务。

3.2常见问题

空回滚

空回滚就是 TCC 还没有执行 Prepare 方法,就已经执行了第二阶段的 Cancel 方法

幂等

幂等就是对于同一个分布式事务的同一个分支事务,重复去调用该分支事务的第二阶段接口,因此,要求 TCC 的二阶段 Confirm 和 Cancel 接口保证幂等,不会重复使用或者释放资源。

Seate分布式事务相关推荐

  1. 分布式事务与Seate框架:分布式事务理论

    推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 给跪了!这套万人期待的 SQL ...

  2. 分布式事务Seata原理

    一.Seata 介绍: 1.Seata 简介: Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT.TCC.SAGA 和 XA 几种不同的事务模 ...

  3. 分布式事务seate-server的docker镜像的制作与部署

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT.TCC.SAGA 和 XA 几种不同的事务模式.在 Seata 中主要有以下三种角色,其中 ...

  4. 「分布式专题」分布式事务 就这?太简单了吧

    目录 基础概念 本地事务 分布式事务 基础理论 CAP理论 BASE理论 分布式事务解决方案 2PC TCC 可靠消息最终一致性 基础概念 本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务 ...

  5. 分布式事务的五种解决方案

    分布式事务的五种解决方案 分布式事务 微服务分布式服务问题 什么是分布是事务 分布式事务应用在哪些场景 分布式事务解决方案 1.基于XA协议的两阶段提交(2PC) 2.代码补偿事务(TCC) 3.本地 ...

  6. 还不会分布式事务,seata xa模式入门实战送上

    文章目录 前言 一.什么是seata? 二.seata原理说明 1.角色说明 2.什么是 Seata 的事务模式? 三.SEATA 的分布式案例 1.业务逻辑说明 2.架构图 3.SEATA 的分布式 ...

  7. 关于分布式事务: 阿里开源的分布式事务框架 Seata 和 LCN的分析

    之前使用过LCN分布式事务, 最近看到面试者简历中另一种方案 Seata, 通过它来在实战中解决分布式事务的问题.故 去简单了解了一下Seata是什么, 和LCN的区别在哪里, 如果是你 你怎么选择解 ...

  8. 分布式事务理论基础之初识Seata

    分布式事务理论基础 CAP定理: Consistency(一致性):用户在访问分布式系统中的任意节点,得到的数据必须一致 Availablity(可用性):用户访问集群中的任意健康节点,必须能得到响应 ...

  9. rabbitmq 查询版本_基于rabbitmq解决分布式事务

    分布式事务要解决的问题是保证二个数据库数据的一致性,本地事务ACID属于刚性事务,基于CAP理论,分布式事务的核心要点柔性事务,最终一致性. 基于rabbitmq解决分布式事务要点如下 生产者采用发送 ...

最新文章

  1. Python:处理一些格式规范的文字
  2. 零基础该如何学习Web前端知识?
  3. RDKit:计算不同分子或构象之间的RMSD
  4. stm32如何执行软复位_常见的单片机复位方式及其原理分析
  5. SpringCloud Feign注解导入失败
  6. 此处不允许使用分组函数_Excel中使用Vlookup函数实现数据分组
  7. c语言字符数组不写,C语言数组
  8. 字节跳动想取消大下周,遭到部分员工激烈反对
  9. 列车时刻管理c语言程序设计,列车时刻表信息管理系统实践报告C语言源代码
  10. 学了python能干啥举例-学了Python可以做哪些有趣的东西
  11. 空调微型计算机控制,空调自动控制
  12. 妙招防止非法入侵Win2000/XP系统(转)
  13. 航空公司客户价值数据的分析
  14. C#合并Excel单元格
  15. StringUtils的使用
  16. form-login属性详解
  17. 初识sscanf_s
  18. bp神经网络时间序列预测,bp神经网络数据预处理
  19. 西元发布智能管理系统工程技术实训室解决方案
  20. 一把王者的时间带你拿捏计算机原码、反码、补码的计算原理

热门文章

  1. python生成序列的weblogo图
  2. Nginx代理浏览器可实时查看程序日志
  3. 霍金去世 但他对人工智能的预言时刻提醒着人类!【附霍金一生大事记】
  4. zepto 和jquery_初学者基础:粘性导航,灵活的视频和Zepto
  5. 入冬后学会穿羽绒服才是时尚之道,女星都这么穿!
  6. python中ignorecase_【Python进阶】2.6字符串忽略大小写的搜索替换 re.IGNORECASE
  7. springboot使用ServletFileUpload上传文件
  8. 百宝箱应用编译打包事宜
  9. firefox 离线模式
  10. 【后端开发知识讲解】