news 2026/4/14 16:49:19

【写给大佬的干货】Seata全解:TC、TM、RM角色拆解与核心部署实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【写给大佬的干货】Seata全解:TC、TM、RM角色拆解与核心部署实战指南

Seata(Simple Extensible Autonomous Transaction)是阿里巴巴开源的分布式事务解决方案。它的架构设计旨在通过最小化业务侵入来解决微服务架构下的数据一致性问题。

以下是对Seata框架三种角色以及部署方式的详细解析:

一、Seata框架的三种角色

Seata 的架构模型主要由TC(事务协调者)TM(事务管理器)RM(资源管理器)这三个核心角色组成。这三个角色分别承担了分布式事务生命周期中的不同职责。

1. TC (Transaction Coordinator) - 事务协调者
  • 定位:Server端,独立部署。
  • 职责
    • 状态维护:负责维护全局事务和分支事务的状态(如BeginPhaseOne_CommitPhaseOne_Rollback等)。
    • 事务决策:负责发起全局事务的提交(Commit)或回滚(Rollback)请求。
    • 状态汇总:收集所有分支事务的状态(Commit/Rollback),决定全局事务的最终结果。
    • 数据持久化:将事务状态写入事务日志表(global_tablebranch_table),用于事务的恢复和补偿。
2. TM (Transaction Manager) - 事务管理器
  • 定位:Client端,通常由发起全局事务的业务服务扮演。
  • 职责
    • 事务边界:负责开启、提交或回滚全局事务(对应@GlobalTransactional注解)。
    • 业务控制:在业务代码中调用TC,告知TC事务的开始或结束。
    • 状态汇报:根据业务执行结果,向TC汇报是否需要提交或回滚全局事务。
3. RM (Resource Manager) - 资源管理器
  • 定位:Client端,通常由涉及具体业务资源(如数据库)的微服务扮演。
  • 职责
    • 分支事务:负责在本地创建分支事务,并向TC注册分支事务(branch_register)。
    • 资源操作:执行实际的业务操作(如SQL更新)。
    • 回滚/提交:接收TC的指令,执行分支事务的提交或回滚(如AT模式下回滚Undo Log)。
    • 锁管理:在AT模式下,RM负责锁表(lock_table)的管理,防止脏写。

二、Seata的部署方式

Seata 的部署主要分为Server端(TC)的部署和Client端(TM/RM)的集成。以下是详细的部署步骤与方案:

1. 部署前的准备
  • 环境要求:JDK 1.8+、Maven(用于构建)、MySQL/PostgreSQL/Redis(用于事务日志存储)。
  • 网络要求:TC服务器需要能够被业务服务(TM/RM)访问到。
2. TC(Server端)的部署

TC是Seata的核心服务,需要单独部署。

  • 方式一:本地/服务器部署

    1. 下载与解压:从Seata官方GitHub或官网(https://seata.io )下载对应版本的二进制压缩包(如seata-server-1.6.0)。
    2. 配置文件
      • registry.conf:配置服务注册中心(如Nacos、Zookeeper),用于TC向注册中心注册自己的服务地址。
      • file.conf:配置事务日志的存储模式(Store Mode)。
        • 推荐使用DB模式:在生产环境中,通常选择store.mode=db,并配置MySQL连接信息(store.db.datasource)。
        • 注意:如果是单机调试,可以使用file模式;但file模式不支持高可用集群。
      • application.yml:可选的Spring Boot风格配置文件,用于覆盖默认配置。
    3. 初始化数据库
      • 在MySQL中创建seata库。
      • 执行script目录下的SQL脚本(如db.sql),创建global_tablebranch_tablelock_tableundo_log等表。
    4. 启动服务
      • 在Linux/Mac终端执行:sh ./bin/seata-server.sh
      • 在Windows终端执行:bin\seata-server.bat
      • 启动参数
        • -h:指定服务注册到注册中心的IP(默认自动获取)。
        • -p:指定服务端口(默认8091)。
        • -m:指定事务日志存储模式(如db)。
      • 集群部署:如果需要高可用集群,只需在多台机器上部署TC服务,并确保它们都注册到同一个注册中心(如Nacos)。
  • 方式二:容器化部署(Docker/Kubernetes)

    • Docker:官方提供了seataio/seata-server镜像。可以通过docker run -d -p 8091:8091 -v /path/to/config:/seata-server/resources seataio/seata-server启动。
    • Kubernetes:可以使用官方提供的Helm Chart或自定义YAML文件进行部署,建议通过ConfigMap注入registry.conffile.conf,通过Secret注入数据库密码。
3. Client端(TM/RM)的集成

TC部署完成后,业务服务需要通过集成Seata Client来扮演TM和RM角色。

  • 依赖引入

    • Spring Cloud Alibaba项目通常引入spring-cloud-starter-alibaba-seata
    • Spring Boot项目引入seata-spring-boot-starter
  • 核心配置(application.yml)

    spring:cloud:alibaba:seata:tx-service-group:my_test_tx_group# 事务组名称,TC通过此名称来区分不同业务service:vgroup-mapping:my_test_tx_group:default# 将事务组映射到默认的TC分组(default)grouplist:default:127.0.0.1:8091# 指定TC服务的地址(如果是集群模式,使用Nacos注册中心则无需手动指定)registry:type:nacosnacos:server-addr:127.0.0.1:8848# 注册中心地址(推荐使用Nacos)
  • 业务代码

    • 在全局事务的入口方法上添加@GlobalTransactional注解,即可将当前服务扮演为TM。
    • 使用Seata的DataSource代理(如DataSourceProxy),在底层扮演RM角色,负责捕获Undo Log(AT模式)或锁表(AT模式)。

三、核心注意事项

  1. 事务组(Transaction Group)my_test_tx_group是业务服务的唯一标识,TC会根据这个标识来区分不同业务的事务日志。
  2. 存储模式选择
    • AT模式(默认):依赖于数据库Undo Log(撤销日志),对业务代码侵入性最低。
    • TCC模式:需要业务手动补偿,适用于对业务有严格控制的场景。
    • SAGA模式:适用于长事务。
    • XA模式:直接依赖底层资源的XA协议,适用于所有资源都支持XA的情况。
  3. 高可用:生产环境强烈建议使用Nacos/Zookeeper作为注册中心,并将TC部署为集群模式(多节点),以避免单点故障。

🔥 关注公众号【云技纵横】,目前正在更新分布式缓存进阶技巧和干货

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 1:50:39

学术研究合作:高校联合开展语音合成社会影响调研

高校联合开展语音合成社会影响调研:GLM-TTS 的科研实践与深度应用 在数字媒体日益渗透日常生活的今天,我们每天接触到的声音——无论是智能助手的提醒、在线课程的讲解,还是社交媒体中的语音评论——越来越多地由算法生成。这种“非人类之口”…

作者头像 李华
网站建设 2026/4/4 4:11:25

掘金社区分享:参与AI主题讨论增加品牌曝光度

GLM-TTS 深度解析:从零样本克隆到工业级语音生成 在智能内容创作日益普及的今天,用户对语音合成的要求早已超越“能读出来”的基础阶段。无论是虚拟主播的情绪表达、有声书的细腻演绎,还是企业级客服系统的个性化音色,都对TTS技术…

作者头像 李华
网站建设 2026/4/12 4:16:49

GLM-TTS推理速度慢?显存优化与KV Cache启用技巧详解

GLM-TTS推理速度慢?显存优化与KV Cache启用技巧详解 在构建智能语音助手、有声读物平台或虚拟人系统时,GLM-TTS 这类端到端文本到语音模型正成为核心技术支柱。它不仅能实现高质量的零样本语音克隆,还支持情感迁移和音素级发音控制&#xff…

作者头像 李华
网站建设 2026/4/9 20:39:20

工业PLC调试入门必看的JLink仿真器使用教程

从零开始玩转J-Link:工业PLC工程师的调试实战指南 你有没有遇到过这样的场景? 一台基于STM32的PLC上电后毫无反应,LED不闪、串口无输出,代码明明烧进去了,却像石沉大海。现场运维急着要结果,而你只能反复断…

作者头像 李华
网站建设 2026/4/12 9:56:18

移动端适配考虑:开发APP内嵌GLM-TTS语音生成功能

移动端适配考虑:开发APP内嵌GLM-TTS语音生成功能 在智能语音助手、有声阅读和个性化播报日益普及的今天,用户对“像人一样说话”的AI声音提出了更高要求。传统TTS系统往往依赖大量训练数据或固定音色模板,难以满足多样化、个性化的交互需求。…

作者头像 李华
网站建设 2026/4/4 2:33:29

账单导出功能设计:支持企业客户报销与审计需求

账单导出功能设计:支持企业客户报销与审计需求 在现代企业级 SaaS 平台的运营中,一个常被低估但至关重要的环节正逐渐浮出水面——账单的可追溯性与结构化输出。尤其是在 AI 模型即服务(MaaS)快速普及的今天,企业用户…

作者头像 李华