分布式事务(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

建表语句地址: seata/mysql.sql at develop · seata/seata · GitHub

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中即可。

下载地址: seata/script/config-center at develop · seata/seata · GitHub

修改项如下:

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配置中,要借助一个脚本来进行执行,官方已经提供好。

地址为: seata/nacos-config.sh at develop · seata/seata · GitHub

新建一个 nacos-config.sh 文件,将脚本内容复制进去,修改 congfig.txt 的路径

上述文件修改好后,打开git工具,将 nacos-config.sh 工具拖

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值