当前位置: 首页 > article >正文

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

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: default
        client:
          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.kler.cn/a/515911.html

相关文章:

  • 2024 行远自迩,笃行不怠
  • 【Postgres_Python】使用python脚本批量创建和导入多个PG数据库
  • 论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24
  • 【玩转全栈】----Django制作部门管理页面
  • 75,【7】BUUCTF WEB [Weblogic]SSRF(未作出)
  • 【优选算法】5----有效三角形个数
  • 【浙江省乡镇界】面图层shp格式arcgis数据+乡镇名称和编码+wgs84坐标无偏移内容测评
  • 在 Windows 11 中为 SMB 3.x 文件共享协议提供 RDMA 支持
  • 【C++图论 并集查找】2492. 两个城市间路径的最小分数|1679
  • TOGAF之架构标准规范-信息系统架构 | 数据架构
  • 小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统
  • c语言贪吃蛇(极简版,基本能玩)
  • 【豆包MarsCode蛇年编程大作战】花样贪吃蛇
  • 操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之缓冲区的管理
  • 百度APP iOS端磁盘优化实践(上)
  • 深入理解Spring Boot:启动方式、注解、配置文件与模板引擎
  • 深度理解递归(树的深度优先遍历、费波那契数列)c++
  • Effective C++ 规则43:学习处理模板化基类内的名称
  • linux+docker+nacos+mysql部署
  • 认识Django项目模版文件——Django学习日志(二)
  • Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解
  • 【C语言】编译链接
  • 软考信安26~大数据安全需求分析与安全保护工程
  • 【C++笔记】哈希表底层实现的深度剖析
  • 车间设备数据采集解决方案
  • 智能体的核心技能之插件,插件详解和实例 ,扣子免费系列教程(11)