Alibaba Spring Cloud 四 Seata 的核心组件:TC

ops/2025/1/24 16:23:57/

Seata 的 Transaction Coordinator (TC) 是分布式事务架构中的核心组件之一,它负责管理全局事务的生命周期,包括事务的创建、状态维护以及协调各分支事务的提交和回滚。以下是有关 TC 的详细解析及其配置和使用方法:


1. TC 的核心功能

  1. 全局事务管理:

    • TC 记录全局事务(Global Transaction)的状态,包括开始、提交和回滚。
    • 为每个全局事务分配一个唯一的事务 ID(XID)。
  2. 分支事务协调:

    • TC 维护每个全局事务下的分支事务列表。
    • 协调分支事务的注册、提交和回滚。
  3. 事务状态维护:

    • TC 持久化事务状态到数据库,确保分布式事务的可靠性。
  4. 事务超时与清理:

    • 如果全局事务长时间未完成,TC 会主动清理超时事务。

2. TC 的工作流程

  1. 全局事务的创建:

    • Transaction Manager ™ 请求 TC 开启全局事务。
    • TC 生成一个唯一的全局事务 ID (XID)。
  2. 分支事务的注册:

    • Resource Manager (RM) 在执行分支事务前向 TC 注册。
    • TC 将分支事务与全局事务绑定。
  3. 分支事务的状态更新:

    • 分支事务完成后,RM 向 TC 报告状态(成功或失败)。
    • TC 更新分支事务状态。
  4. 全局事务的提交或回滚:

    • TM 通知 TC 提交或回滚全局事务。
    • TC 根据分支事务的状态协调 RM 进行提交或回滚操作。

3. TC 的部署与配置

3.1 环境准备

下载 Seata Server

从 Seata 官方 GitHub 下载最新版本。

配置文件修改
  1. registry.conf
    配置 Seata 的注册中心和配置中心。

    示例(Nacos):

    registry {type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = ""group = "SEATA_GROUP"}
    }
    config {type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = ""group = "SEATA_GROUP"dataId = "seata.properties"}
    }
    
  2. file.conf
    配置事务日志存储。

    示例(数据库):

    store {mode = "db"  # 使用数据库存储事务日志db {datasource = "druid"dbType = "mysql"driverClassName = "com.mysql.cj.jdbc.Driver"url = "jdbc:mysql://127.0.0.1:3306/seata"user = "root"password = "root"}
    }
    

3.2 数据库表配置

如果 TC 使用数据库模式,需要创建以下表:

  1. global_table
    存储全局事务信息。

    CREATE TABLE global_table (xid VARCHAR(128) NOT NULL,transaction_id BIGINT,status TINYINT,gmt_create TIMESTAMP,gmt_modified TIMESTAMP,PRIMARY KEY (xid)
    );
    
  2. branch_table
    存储分支事务信息。

    CREATE TABLE branch_table (branch_id BIGINT,xid VARCHAR(128) NOT NULL,resource_group_id VARCHAR(32),resource_id VARCHAR(256),branch_type VARCHAR(8),status TINYINT,client_id VARCHAR(64),application_data TEXT,gmt_create TIMESTAMP,gmt_modified TIMESTAMP,PRIMARY KEY (branch_id)
    );
    
  3. lock_table
    存储分布式事务锁。

    CREATE TABLE lock_table (row_key VARCHAR(128) NOT NULL,xid VARCHAR(128),transaction_id BIGINT,branch_id BIGINT,resource_id VARCHAR(256),gmt_create TIMESTAMP,gmt_modified TIMESTAMP,PRIMARY KEY (row_key)
    );
    

3.3 启动 Seata Server

在 Seata 解压目录中执行以下命令启动 TC 服务:

sh bin/seata-server.sh -p 8091

参数说明:

  • -p:指定服务端口。
  • -m:指定存储模式(默认 file,可设置为 db)。

4. TC 的高可用部署

4.1 多节点集群部署

Seata 支持多节点集群部署,通过注册中心(如 Nacos、Eureka)实现。

配置集群节点

conf/cluster.conf 文件中配置多个节点:

192.168.1.101:8091
192.168.1.102:8091
192.168.1.103:8091
配置注册中心

确保所有节点的 registry.conf 指向同一个注册中心(如 Nacos)。


4.2 数据库高可用

  • 配置数据库主从复制或使用分布式数据库(如 TiDB)。
  • file.conf 中配置数据源连接池(如 HikariCP 或 Druid)。

5. TC 的运行与调试

查看 TC 日志

  • Seata Server 的日志文件默认保存在 logs/seata.log 中。
  • 关注以下关键日志:
    1. 全局事务的创建与状态变更。
    2. 分支事务的注册与状态报告。
    3. 超时事务的清理。

配置日志级别

conf/logback.xml 中配置日志级别为 DEBUG 或 INFO:

<root level="DEBUG"><appender-ref ref="Console"/><appender-ref ref="File"/>
</root>

6. TC 的实践建议

  1. 高可用:

    • 使用集群模式部署 TC,避免单点故障。
    • 确保数据库的高可用性,防止数据丢失。
  2. 事务超时配置:

    • 设置合理的事务超时时间,避免长时间占用资源。
    • 配置项(在 application.yml 中):
      seata:service:vgroup-mapping:my_tx_group: defaultclient:transaction:timeout: 60000 # 单位:毫秒
      
  3. 监控与调试:

    • 使用 Seata 控制台(seata-console)监控事务状态。
    • 定期清理过期事务和日志文件。
  4. 优化性能:

    • 配置数据库连接池(如 Druid)提升数据库操作性能。
    • 在高并发场景下,优化锁表(lock_table)的索引设计。

7. TC 与 TM、RM 的交互流程

  1. 全局事务创建

    • TM 调用 TC 的 begin 接口,创建全局事务。
    • TC 返回 XID,作为事务标识。
  2. 分支事务注册

    • RM 在执行本地事务前向 TC 注册分支事务。
    • TC 返回注册成功的状态。
  3. 事务状态更新

    • RM 向 TC 报告分支事务的执行结果(成功或失败)。
    • TC 更新分支事务的状态。
  4. 全局事务提交或回滚

    • TM 通知 TC 提交或回滚全局事务。
    • TC 通知所有相关 RM 执行分支事务的提交或回滚。

http://www.ppmy.cn/ops/152781.html

相关文章

【Matlab高端绘图SCI绘图模板】第003期 绘制面积填充图

1.面积图简介 面积图和折线图一样&#xff0c;面积图也用于强调数量随时间而变化的程度&#xff0c;也可用于引起人们对总趋势的注意。他们最常用于表现趋势和关系&#xff0c;而不是传达特定的值。 所有的数据都从相同的零轴开始。每一个数据集的起点不同&#xff0c;都是基…

8.5 Whisper:解锁语音识别新高度的智能助手

Whisper:解锁语音识别新高度的智能助手 引言:从语音到文字的技术飞跃 在当今的人工智能技术中,语音识别 已成为人机交互的重要环节。从语音助手到实时字幕生成,语音识别技术正在改变我们的沟通方式。OpenAI Whisper 是一款功能强大的开源语音识别模型,它结合了高精度、语…

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…

minio https配置

minio启动时候指定数据目录,配置文件&#xff0c;密钥文件目录&#xff0c;环境文件 1.创建minio用户,专门用于服务启动的 groupadd -r minio-user useradd -M -r -g minio-user minio-user 2.在当前用户目录下创建minio目录&#xff0c;存储minio相关文件 mkdir minio 在mini…

智慧农业——温湿,土壤,风速风向,降雨量 传感器监视平台

基于温湿、土壤、风速风向、降雨量传感器的智慧农业监视平台具有多方面的优点&#xff0c;主要体现在精准监测、智能决策、提升产量与品质、降低成本与风险等方面&#xff0c;以下是具体介绍&#xff1a; - **精准监测方面** - **实时数据获取**&#xff1a;能够实时采集农…

【spring】集成JWT实现登录验证

在 Spring 应用中&#xff0c;使用 JSON Web Token (JWT) 是一种常见的认证和授权机制。JWT 是一种基于 JSON 的开放标准 (RFC 7519)&#xff0c;用来在各方之间传递安全、可信的数据。以下是如何在 Spring 框架中集成和使用 JWT 的完整指南。 核心概念 JWT 结构&#xff1a; H…

循环队列(C语言)

从今天开始我会开启一个专栏leetcode每日一题&#xff0c;大家互相交流代码经验&#xff0c;也当作我每天练习的自我回顾。第一天的内容是leetcode622.设计循环队列。 一、题目详细 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#…