分布式事务XA与AT

简介: 个人理解

XA

理解

第一步是@GlobalTransactional在方法入口通知TM事务管理器发送全局事务的范围给TC事务协调者开启事务

开启事务后第二步是调用各分支去TC事务协调中去注册分支的事务

第三步是微服务去执行相对应的sql

比如我订单对应的是库存跟支付 那么就是库存跟支付去执行自己的sql语句

执行完了之后是向TC事务协调者汇报事务的状态

然后TC事务协调者会根据各分支汇报的情况去选择全局提交或者全局回滚

然后根据选择的结果通知给RM资源管理器 去处理各分支的提交或者回滚

疑问 第二阶段为什么是由TM事务管理器去发起的提交 不应该是TC接收到所有RM的结果汇报了之后自己去检查判断吗 为什么要有2.1

还是说TM能感知到所有事务完毕了 然后发起询问请求TC 然后TC再根据结果去通知RM呢

优缺点很好理解

保证事务所有一致性的前提下肯定是牺牲了可用性跟性能

因为要保证事务的所有一致性肯定就是要将事务经过的地方都锁起来

所以这个时候别人要访问修改都得排队 要等到全局事务的提交或者回滚才能释放数据库资源

而且还要依赖关系型数据库 因为关系型数据库才有事务

所以我觉得应该不咋用 性价比不高

AT模式
AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。

那么如何解决锁定资源周期过长的缺陷呢

那无非就是不要等到全局事务的提交或者回滚才能释放资源

这个时候就可以采用类似redis那种快照版本

记录当前的版本的快照 如果提交 删除快照 因为提交了就不用回滚到之前的版本了

如果全局事务回滚的话 那就是根据快照的版本恢复到事务执行之前的数据就ok了

注意 快照一定是在执行sql语句之前就已经保存下来的

AT与XA的区别

简述AT模式与XA模式最大的区别是什么?

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。

  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。

  • XA模式强一致;AT模式最终一致

所谓强一致就是从头到尾 各微服务的事务状态都保持一致

最终一致则是最后的结果一致 过程不一定一致

优缺点

AT模式的优点:

  • 一阶段完成直接提交事务,释放数据库资源,性能比较好

  • 利用全局锁实现读写隔离

  • 没有代码侵入,框架自动完成回滚和提交

AT模式的缺点:

  • 两阶段之间属于软状态,属于最终一致

  • 框架的快照功能会影响性能,但比XA模式要好很多

相关文章
|
7月前
|
Java 数据库连接 API
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
143 0
|
5月前
分布式篇问题之集群(Cluster)模式主控节点的高可用性问题如何解决
分布式篇问题之集群(Cluster)模式主控节点的高可用性问题如何解决
|
7月前
|
开发框架 Java 数据库连接
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)(下)
分布式事物【XA强一致性分布式事务实战、Seata提供XA模式实现分布式事务】(五)-全面详解(学习总结---从入门到深化)
114 0
|
7月前
|
程序员
深入解析:分布式一致性的终极解决方案——XA协议
本文介绍了分布式系统中的两种一致性协议:2PC(两阶段提交)和3PC(三阶段提交)。2PC分为准备和提交两个阶段,确保所有参与者在提交前达成一致。3PC则在2PC基础上增加了一个CanCommit阶段,提高容错性和可用性,参与者在超时后可自行中断事务。选择协议需依据业务需求和系统特点,高一致性要求可选3PC,注重性能则选2PC。
102 0
|
7月前
|
SQL 关系型数据库 MySQL
分布式事物【XA强一致性分布式事务实战、分布式架构的理论知识、TCC核心组成】(六)-全面详解(学习总结---从入门到深化)
分布式事物【XA强一致性分布式事务实战、分布式架构的理论知识、TCC核心组成】(六)-全面详解(学习总结---从入门到深化)
76 0
|
SQL JSON Java
Seata分布式事务模式(TA、TCC、XA、SAGA)工作机制
分布式应用有一个比较明显的问题就是,一个业务流程通常需要几个服务来完成,业务的一致性很难保证。为了保障业务一致性,每一步都要在 catch 里去处理前面所有的“回滚”操作,可读性及维护性差,开发效率低下。
472 0
|
SQL 关系型数据库 数据库
30-微服务技术栈(高级):分布式事务Seata的XA模式
在分布式架构系统中,服务不止一个,一个完整的业务链路肯定也不止调用一个服务,此时每个服务都有自己的数据库增删改查,而每一个写操作对应一个本地事务。如果想要确保全部的业务状态一致,也就意味着需要所有的本地事务状态一致,这在我们之前的学习中肯定是不具备的,如何做到跨服务、跨数据源的事务一致性将是本章节的重点学习内容。
209 0
|
SQL NoSQL Java
还不会分布式事务,seata xa模式入门实战送上
还不会分布式事务,seata xa模式入门实战送上
748 0
还不会分布式事务,seata xa模式入门实战送上
|
存储 关系型数据库 MySQL
详解 Mysql 分布式事务 XA(跨数据库事务)
详解 Mysql 分布式事务 XA(跨数据库事务)
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?