基于Seata+Nacos分布式事务方案实战
概念介绍
含义解释
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说就是软件系统有了多个不同的数据源,这些数据源不仅地理位置不同,保存的数据内容也会不同,并且每个业务操作都涉及对多个数据源的修改,此时分布式事务就保证这些对数据源的修改要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证分布式系统中的**单个业务操作对多个数据源**的修改都能符合最终的预期。
*举例来说*: 在分布式系统中,往往有多个服务集群,每个服务集群有各自的数据源集群,比如订单服务集群+订单数据库集群,库存服务集群+库存数据库集群等等,一次下订单的业务操作涉及对订单服务集群、库存服务集群的操作,分布式事务是为了保证做了下订单操作后,订单服务集群的订单
信息、库存服务的库存信息都能正确更新(或者失败后能回滚恢复)。
典型框架
+ Alibaba-Seata
+ Seata基于XA,TCC等理论实现分布式事务功能。
实战使用
以Alibaba的Seata框架来进行分布式事务实战
核心原理
-
分布式架构(Seata)
- TC: 事务协调器,用于接受RM的反馈结果,并基于结果通知TM事务成功或失败的处理逻辑
- TM: 事务管理器,用于通知RM进行事务提交或者回滚操作
- RM: 资源管理器,相当于各个微服务的本地事务,主要用于接收TM的事务管理通知,并向TC反馈事务状态、结果
-
分布式事务方案
- XA-eXtended Architect
- TCC-Try Confirm Cancel-三阶段
实战(SpringBoot+Seata+Nacos)
Nacos部署
-
在指定的Docker文件目录创建conf、data、logs等文件夹(用于后续作文件夹映射)
-
部署(docker)
docker run -d -p 8848:8848 -v X:\XX\group-distributed-transaction\nacos\conf:/home/nacos/conf -v X:\XX\group-distributed-transaction\nacos\logs:/home/nacos/logs -v X:\XX\group-distributed-transaction\nacos\data:/home/nacos/data --name nacos-server nacos/nacos-server:latest
- seata.properties配置事务group
- 在运行的nacos下的public命名空间下创建seata.properties,Group填DEFAULT-GROUP
service.vgroupMapping.order-service-tx-group=default service.vgroupMapping.account-service-tx-group=default service.vgroupMapping.business-service-tx-group=default service.vgroupMapping.storage-service-tx-group=