目录
一、XA模式原理
在XA模式中,一个事务通常被分为两个阶段:
二、Seata的XA模式
RM一阶段的工作:
TC一阶段的工作:
RM二阶段的工作:
1、优点:
2、缺点:
三、实现XA模式
1、修改yml文件,开启XA模式
2、给发起全局事务的入口方法添加@GlobalTransactional注解
一、XA模式原理
- XA模式是一种分布式事务处理模式,常用于多个数据库之间的事务处理。
- 在XA模式中,一个事务被视为由一个或多个资源管理器(例如数据库)控制的一系列操作。
- 这些资源管理器必须支持XA协议,以确保事务的一致性和可靠性。
在XA模式中,一个事务通常被分为两个阶段:
- 准备阶段和提交阶段。
- 在准备阶段,事务管理器将事务状态记录到事务日志,通知各个资源管理器准备执行相关操作。
- 在提交阶段,事务管理器将事务提交或回滚,并通知各个资源管理器进行相应操作。
- XA模式保证了多个数据库之间的事务操作的一致性和可靠性。
- 总的思路是,RM每次完成了任务都要向事务协调者返回消息;
- 事务协调者根据获得的消息来选择进入下一阶段或是回滚;
二、Seata的XA模式
RM一阶段的工作:
- 注册分支事务到TC
- 执行分支业务sql但不提交
- 报告执行状态到TC
TC一阶段的工作:
- TC检测各分支事务执行状态
- 如果都成功,通知所有RM提交事务
- 如果有失败,通知所有RM回滚事务
RM二阶段的工作:
接收TC的指令,选择提交或回滚
1、优点:
• 事务的强一致性,满足 ACID 原则。
• 常用数据库都支持,实现简单,并且没有代码侵入
2、缺点:
• 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
• 依赖关系型数据库实现事务
三、实现XA模式
1、修改yml文件,开启XA模式
data-source-proxy-mode: XA
2、给发起全局事务的入口方法添加@GlobalTransactional注解
- 发起全局事务的入口方法是指启动一个全局事务的入口方法,一方面它可以创建全局事务对象来跟踪全局事务的状态和参与者,另一方面它可以协调分支事务之间的执行,确保它们成功地提交或者回滚。
- 在分布式系统中,由于业务涉及多个不同的节点和资源,会很容易出现分支事务之间存在数据不一致的情况,所以需要使用分布式事务来保证数据的一致性。发起全局事务的入口方法是指在这种情况下,通过调用分布式事务中间件提供的API,启动一个全局事务,将该事务拆分成多个分支事务,并为每个分支事务创建一个事务上下文,同时协调分支事务的执行,保证最终的数据一致性。
- 不同的分布式事务中间件提供不同的API来启动全局事务,但通常都会包括创建全局事务对象和注册分支事务等步骤。