Seata简介
Seata
分布式事务
分布式之前,单机单库没有这个问题,从 1:1 -> 1:N -> N:N
跨数据库,多数据源的统一调度,就会遇到分布式事务问题
如下图,单体应用被拆分成微服务应用,原来的三个模板被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。
简介
基于分布式的事务管理
官方文档:点我传送
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
分布式事务处理过程的一致性ID + 三组件模型
Transaction ID XID:全局唯一的事务ID
三组件的概念
- Transaction Coordinator(TC):事务协调器,维护全局事务,驱动全局事务提交或者回滚
- Transaction Manager(TM):事务管理器,控制全局事务的范围,开始全局事务提交或回滚全局事务
- Resource Manager(RM):资源管理器,控制分支事务,负责分支注册分支事务和报告
处理过程
- TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID
- XID在微服务调用链路的上下文中传播
- RM向TC注册分支事务,将其纳入XID对应全局事务的管辖
- TM向TC发起针对XID的全局提交或回滚决议
- TM调度XID下管辖的全部分支事务完成提交或回滚请求
下载
修改file.conf
首先我们需要备份原始的file.conf文件
主要修改,自定义事务组名称 + 事务日志存储模式为db + 数据库连接信息,也就是修改存储的数据库
修改service模块
修改服务模块中的分组
修改store模块
修改存储模块
创建一个seata数据库
在seata数据库中建表,建表语句在 seata/conf目录下的 db_store.sql
修改seata-server的registry.conf配置文件
目的是:指明注册中心为nacos,及修改nacos连接信息
然后启动nacos 和 seata-server
怎么玩
本地:@Transaction
全局:@GlobalTransaction
Spring自带的是 @Transaction 控制本地事务
而 @GlobalTransaction控制的是全局事务
我们只需要在需要支持分布式事务的业务类上,使用该注解即可