04-XA模式
1.XA模式介绍
XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。
1.1.两阶段提交
XA是规范,目前主流数据库都实现了这种规范,实现的原理都是基于两阶段提交。
正常情况:

异常情况:

一阶段:
事务协调者通知所有事务参与本地事务。
本地事务执行完后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁。
二阶段:
事务协调者基于一阶段的提交判断下一步的操作。
如果一阶段都成功,则通知所有事务参与者,提交事务。
如果一阶段任意一个参与者失败,泽同志以所有参与者,回滚事务。
1.2.seata的XA模型
Seata对原始的XA模式做了简单的封装和改造,以适应自己的事务模型,基本架构如图:

RM一阶段的工作:
(1)注册分支事务到TC
(2)执行业务sql但不提交
(3)报告事务状态到TC
TC二阶段的工作:
TC检查各分支事务的状态:
a,如果都成功,通知RM提交事务。
b,如果有失败,通知RM回滚事务。
RM二阶段的工作:
接收TC的指令,提交或回滚事务。
1.3.优缺点
XA模式的优点:
事务的强一致性,满足ACID原则。
常用数据库都支持,实现简单,没有业务侵入。
XA模式的缺点是什么:
因为一阶段需要锁定数据库资源,等到二阶段执行结束才释放,性能较差。
依赖关系型数据库实现事务。
2.实现XA模式
(1)给每个微服务添加seata依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<artifactId>seata-spring-boot-starter</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata.version}</version>
</dependency>
</dependencies>
(2)修改application.yml文件(每个参与事务的微服务),开启XA模式
seata:
registry:
type: nacos
nacos:
server-addr: 192.168.136.160:8848
namespace: ""
group: DEFAULT_GROUP
application: seata-server
username: nacos
password: nacos
tx-service-group: seata-demo #事务组名称
service:
vgroup-mapping: # 事务组与cluster的映射关系
seata-demo: GZ
data-source-proxy-mode: XA
(3)给发起全局事务的入口方法添加@GlobalTransactional注解

浙公网安备 33010602011771号