前言
今天来讲解关于Seata中分布式四种模型的介绍。
文中文件资源和项目在结尾都有资源链接
Seata分为三大模块,分别是 TM、RM 和 TC
TC (Transaction Coordinator) - 事务协调者: 维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器: 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器: 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
在 Seata 中,分布式事务的执行流程:
- TM 开启分布式事务(TM 向 TC 注册全局事务记录);
- 按业务场景,编排数据库、服务等事务内资源(RM 向 TC 汇报资源准备状态 );
- TM 结束分布式事务,事务一阶段结束(TM 通知 TC 提交/回滚分布式事务);
- TC 汇总事务信息,决定分布式事务是提交还是回滚;
- TC 通知所有 RM 提交/回滚 资源,事务二阶段结束。
TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的服务端独立部署。
服务端存储模式支持三种:
file: 单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)
DB: 高可用模式,全局事务会话信息通过DB共享,相对性能差一些
redis: Seata-Server1.3及以上版本支持,性能较高,存在事务信息丢失风险,需要配合实际场景使用
TC环境搭建详解
这里我们使用DB高可用模式,找到conf/file.conf
文件
修改以上中的信息,找到对应的db配置,修改其中的jdbc连接,要注意其中涉及到三个表(global_table,branch_table,lock_table
),同时 mysql5和mysql8的驱动是不一样的
mysql5:com.mysql.jdbc.Driver
mysql8:com.mysql.cj.jdbc.Driver
建表语句地址:github.com/seata/seata…
global_table: 全局事务表,每当有一个全局事务发起后,就会在该表中记录全局事务的ID
branch_table: 分支事务表,记录每一个分支事务的 ID,分支事务操作的哪个数据库等信息
lock_table: 全局锁
当上述配置好以后,重启Seata即可生效。
Seata 配置 Nacos
Seata支持注册服务到Nacos,以及支持Seata所有配置放到Nacos配置中心,在Nacos中统一维护;在 高可用模式下就需要配合Nacos来完成
首先找到 conf/registry.conf
,修改registry
信息
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server" # 这里的配置要和客户端保持一致
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP" # 这里的配置要和客户端保持一致
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
dataId = "seataServer.properties"
}
......
}
修改好后,将seata中的一些配置上传到Nacos中,因为配置项比较多,所以官方提供了一个config.txt
,只下载并且修改其中某些参数后,上传到Nacos中即可。
修改项如下:
service.vgroupMapping.mygroup=default # 事务分组
store.mode=db
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
store.db.user=root
store.db.password=123456
修改好这个文件以后,把这个文件放到seata目录下
把这些配置都加入到Nacos配置中,要借助一个脚本来进行执行,官方已经提供好。
新建一个nacos-config.sh
文件,将脚本内容复制进去,修改congfig.txt
的路径