2、然后,配置application.yml,让微服务通过注册中心找到seata-tc-server:
1、修改application.yml文件(每个参与事务的微服务),开启XA模式:
2、给发起全局事务的入口方法添加@GlobalTransactional注解,
事务ACID原则
一、理论基础
1)CAP理论
CAP定理– Consistency
CAP定理– Availability
CAP定理-Partition tolerance
2)BASE理论
二、分布式事务Seata
1)初识seata
Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。
2)Seata架构
- TC (Transaction Coordinator) – 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
- TM (Transaction Manager) – 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
- RM (Resource Manager) – 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata提供了四种不同的分布式事务解决方案:
3)微服务集成seata
1、首先,引入seata相关依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <exclusions> <!--版本较低,1.3.0,因此排除--> <exclusion> <artifactId>seata-spring-boot-starter</artifactId> <groupId>io.seata</groupId> </exclusion> </exclusions> </dependency> <!--seata starter 采用1.4.2版本--> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>${seata.version}</version> </dependency>
2、然后,配置application.yml,让微服务通过注册中心找到seata-tc–server:
三、XA模式
1)XA模式原理
XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,
2)seata的XA模式
seata的XA模式做了一些调整,但大体相似:
RM一阶段的工作:
TC二阶段的工作:
RM二阶段的工作:
3)实现XA模式
Seata的starter已经完成了XA模式的自动装配,实现非常简单,步骤如下:
1、修改application.yml文件(每个参与事务的微服务),开启XA模式:
seata: data-source-proxy-mode: XA # 开启数据源代理的XA模式
2、给发起全局事务的入口方法添加@GlobalTransactional注解,
本例中是OrderServiceImpl中的create方法:
@Override@GlobalTransactional public Long create(Order order) { // 创建订单 orderMapper.insert(order); // 扣余额 ...略 // 扣减库存 ...略 return order.getId(); }
3、重启服务并测试
四、AT模式
1)AT模式原理
AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。
阶段一RM的工作:
阶段二提交时RM的工作:
阶段二回滚时RM的工作:
五、TCC模式
1)TCC模式原理
TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。需要实现三个方法:
TCC的工作模型图:
2)TCC的空回滚和业务悬挂
当某分支事务的try阶段阻塞时,可能导致全局事务超时而触发二阶段的cancel操作。在未执行try操作时先执行了cancel操作,这时cancel不能做回滚,就是空回滚。
对于已经空回滚的业务,如果以后继续执行try,就永远不可能confirm或cancel,这就是业务悬挂。应当阻止执行空回滚后的try操作,避免悬挂
六、Saga模式
Saga模式是SEATA提供的长事务解决方案。也分为两个阶段:
Saga模式优点:
缺点:
四种模式对比
XA |
AT |
TCC |
SAGA |
|
一致性 |
强一致 |
弱一致 |
弱一致 |
最终一致 |
隔离性 |
完全隔离 |
基于全局锁隔离 |
基于资源预留隔离 |
无隔离 |
代码侵入 |
无 |
无 |
有,要编写三个接口 |
有,要编写状态机和补偿业务 |
性能 |
差 |
好 |
非常好 |
非常好 |
对一致性、隔离性有高要求的业务 |
对性能要求较高的事务。 有非关系型数据库要参与的事务。 |
原文地址:https://blog.csdn.net/a6470831/article/details/124677896
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17931.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!