首页 > 其他分享 >分布式事务(五):Seata之XA事务模式原理

分布式事务(五):Seata之XA事务模式原理

时间:2024-02-07 17:12:56浏览次数:25  
标签:事务 Seata 数据源 XA 模式 注册 分支

1、XA事务模式概述

  XA事务模式是在 Seata 定义的分布式事务框架内,利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种 事务模式。

 0

1.1、执行阶段

  可回滚:业务 SQL 操作放在 XA 分支中进行,由资源对 XA 协议的支持来保证 可回滚

  持久化:XA 分支完成后,执行 XA prepare,同样,由资源对 XA 协议的支持来保证 持久化(即,之后任何意外都不会造成无法回滚的情况)

1.2、完成阶段

  分支提交:执行 XA 分支的 commit

  分支回滚:执行 XA 分支的 rollback

2、XA事务模式工作机制

2.1、整体运行机制

  XA模式运行在Seata定义的事务框架内:

 

2.1.1、执行阶段(E xecute)

  XA start/XA end/XA prepare + SQL + 注册分支

2.1.2、完成阶段(Finish)

  XA commit/XA rollback

2.2、数据源代理

  XA 模式需要 XAConnection。

2.2.1、获取XAConnection的两种方式

获取 XAConnection 有两种方式:

  方式一:要求开发者配置 XADataSource,会增加开发负担,需要为 XA 模式专门去学习和使用 XA 数据源,与 透明化 XA 编程模型的设计目标相违背,不建议。

  方式二:根据开发者的普通 DataSource 来创建,和 AT 模式使用一样,开发者完全不必关心 XA 层面的任何问题,保持本地编程模型即可。

  数据源代理根据普通数据源中获取的普通 JDBC 连接创建出相应的 XAConnection。

1.1、方式二与AT模型的类比

类比 AT 模式的数据源代理机制,如下:

 0

1.2、方式一与AT模型的类比

  方式二是在做数据库驱动程序要做的事情。不同的厂商、不同版本的数据库驱动实现机制是厂商私有的,我们只能保证在充分测试过的驱动程序上是正确的,开发者使用的驱动程序版本差异很可能造成机制的失效。

  方式二无法保证兼容的正确性,所以,XA 模式的数据源代理设计需要同时支持第一种方式:基于 XA 数据源进行代理。

  类比 AT 模式的数据源代理机制,如下:

 0

3、分支注册

  XA start 需要 Xid 参数,这个 Xid 需要和 Seata 全局事务的 XID 和 BranchId 关联起来,以便由 TC 驱动 XA 分支的提交或回滚。

  Seata2.x 的 BranchId 是在分支注册过程,由 TC 统一生成的,所以 XA 模式分支注册的时机需要在 XA start 之前。

优化方向:

  把分支注册尽量延后。类似 AT 模式在本地事务提交之前才注册分支,避免分支执行失败情况下,没有意义的分支注册。

  这个优化方向需要 BranchId 生成机制的变化来配合。BranchId 不通过分支注册过程生成,而是生成后再带着 BranchId 去注册分支。

 

标签:事务,Seata,数据源,XA,模式,注册,分支
From: https://www.cnblogs.com/RunningSnails/p/18011077

相关文章

  • 分布式事务(三):Seata之TCC事务模式原理
    TCC模式是Seata支持的一种由业务方细粒度控制的侵入式分布式事务解决方案,是继AT模式后第二种支持的事务模式。其分布式事务模型直接作用于服务层,不依赖底层数据库,可以灵活选择业务资源的锁定粒度,减少资源锁持有时间,可扩展性好,是为独立部署的SOA服务而设计的。TCC......
  • 分布式事务(二):Seata概述
    Seata官方文档地址:https://seata.apache.org/zh-cn/。1、Seata引入 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:仓储服务:对给定的商品扣除仓储数量。订单服务:根据采购需求创建订单。帐户服务:从用户帐户中扣除余额。在上述架构图中有仓......
  • 题解 AT_exawizards2019_e【Black or White】
    设\(P_b(k),P_w(k)\)表示已经吃了\(k\)块巧克力,把所有黑/白巧克力都吃光了的概率。枚举最后一块黑/白巧克力被吃的时间,容易得到:\[\begin{aligned}P_b(k)&=\sum_{i=1}^k\frac{\binom{i-1}{b-1}}{2^i}\\P_w(k)&=\sum_{i=1}^k\frac{\binom{i-1}{w-1}}{2^i}\\\end{aligned}\]......
  • Jmeter事务控制器
    事务控制器(TransactionController),事务控制器生成一个额外的示例,该示例测量执行嵌套测试元素所花费的总时间GenerateParentSample:生成父例,如果选中则该样本将作为其他样本的父样本生成,如果不选中则该样本将作为独立样本生成Includedurationoftimerandpre-postprocess......
  • 数据库之隔离级别,脏读幻读,事务特性
    目录1事务隔离级别1.1默认隔离级别1.2读未提交1.3读已提交1.4可重复读1.5序列化2事务关键词2.1定义(脏读,不可重复读,虚读)2.2不可重复读与幻读的区别3事务的四个特性3.1原子性3.2一致性3.3隔离性3.4持久性1事务隔离级别1.1默认隔离级别ISOLATION_DEFAULT:默认......
  • CF1483F Exam
    我永远喜欢数据结构神仙\(\color{maroon}*3400\)字符串题。感觉现有的一篇SA题解讲的不太清楚,来一篇更加清楚、严谨的SA题解。洛谷CF给出\(n\)个字符串\(s_1\sims_n\),求有多少对\((i,j)\),满足:\(1\lei,j\len\)。\(s_j\)是\(s_i\)的真子串。不存在\(k\)......
  • 分布式事务Seata
    TC (TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (TransactionManager)-事务管理器:定义全局事务的范围,开始全局事务、提交或回滚全局事务。RM (ResourceManager)-资源管理器:管理分支事务处理的资源(Resource),与TC......
  • [ABC238F] Two Exams 题解
    题目链接题意有\(N\)个人,有两个\(1\simN\)排列\(P,Q\),在其中选择\(K\)个数,要满足:如果\(P_x<P_y\)且\(Q_x<Q_y\)则不能选了\(y\)而不选\(x\)。思路首先按照\(P\)从小到大排序,这样的话只用考虑\(Q\)。设\(f_{i,j,k}\)表示从前\(i\)个数中选\(j\)个,其中......
  • kettle从入门到精通 第四十一课 kettle 事务(单个转换文件)
    1、大家都知道,我们在平常写java或者C#等代码时,如果涉及操作多个表时为了保持数据一致性需要开启事务,同样kettle也支持事务,今天我们一起来学习下kettle单个转换文件内的事务特性。转换文件中的步骤是并行执行的,每个步骤都打开一个独立的数据库连接并开始一个事务。尽管这样在很多......
  • spring声明式事务(@Transactional)开发常犯的几个错误及解决办法
    目前JAVA的微服务项目基本都是SSM结构(即:springCloud+springMVC+Mybatis),而其中Mybatis事务的管理也是交由spring来管理,大部份都是使用声明式事务(@Transactional)来进行事务一致性的管理,然后在实际日常开发过程中,发现很多开发同学都用错了spring声明式事务(@Transactional)或者说使用......