Seata AT 基本介绍

Seata AT(Seata Autonomous Transaction) 是一款开源的分布式事务解决方案,旨在解决分布式系统中事务一致性的问题。它提供了简单易用的 API 和完整的管理控制台,支持各种分布式环境下的事务处理。

一、Seata AT 的基本原理

Seata AT 的基本原理是通过在分布式环境中引入两阶段提交协议(Transaction Commit Protocol) 来保证事务的一致性。具体流程如下:

1) 事务发起方向 Seata Server 发起一个全局事务创建请求(GTM),创建一个全局事务 ID。

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>1.4.2</version>
</dependency>

2) Seata Server 根据全局事务 ID 在相关的 Server 上创建分支事务(branch transaction), 用于处理服务本地事务的提交和回滚。

public interface TransactionService {

    /**
     * Global begin, return a global transaction Id.
     *
     * @param groupId         tx group id
     * @param transactionName tx business
     * @param timeout         timeout in MILLISECONDS
     * @return XID global transaction id
     * @throws TransactionException transaction exception
     */
    String begin(String groupId, String transactionName, int timeout) throws TransactionException;}

}

TransactionService transactionService = new DefaultTransactionServiceImpl();

String xid = transactionService.begin("my_test_tx_group", "", 3000);

3) 分布式系统中的其他 Server 接收到请求后,在本地运行事务,并记录分支事务与全局事务的关联关系。

4) 全局事务发起方维护全局事务状态,根据各个分支事务的提交和回滚状态来判断是否提交全局事务。

二、Seata AT 的主要特点

Seata AT 拥有以下主要特点:

1) 分布式事务可嵌入到任意的应用系统中,并且不改变应用系统的代码和数据源配置。

2) 提供了完整的事件监听和分布式锁机制,保证分布式事务的可靠处理。

3) 支持多种场景下的事务处理,包括分布式数据库事务、跨 MQ 的事务、RPC 事务等。

三、Seata AT 的应用场景

Seata AT 在以下场景下是很有用的:

1) 具有高并发读写操作的分布式系统,如电商、金融交易等。

2) 多方参与的分布式系统,如多个用户同时协作完成任务。

3) 多个系统之间需要保证数据一致性的分布式系统。

四、Seata AT 的使用指南

以下是一个简单的 Seata AT 使用示例:

1) 创建数据库库表。在 StartSeataAT.sql 中包含了 SQL 创建脚本。

-- seata全局事务表,务必按照库文件中的字段
-- 注意:transaction_id 是一个非常关键的字段,要使用上下文环境获取,否则会导致没法提交或回滚
 CREATE TABLE `seata_global_transaction` (
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `status` tinyint(4) NOT NULL,
  `application_id` varchar(32) NOT NULL,
  `transaction_service_group` varchar(32) NOT NULL,
  `transaction_name` varchar(128) NOT NULL,
  `timeout` int(11) NOT NULL,
  `transaction_type` tinyint(4) NOT NULL,
  `start_time` varchar(32) NOT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`transaction_id`),
  UNIQUE KEY `ux_seata_global_transaction_xid` (`xid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- seata分支事务表,务必按照库文件中的字段
-- 注意:xid,branch_id 和 resource_group_id 是关键字段,要使用上下文环境获取,否则会导致没法提交或回滚
CREATE TABLE `seata_branch_transaction` (
  `branch_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `xid` varchar(128) NOT NULL,
  `resource_group_id` varchar(32) NOT NULL,
  `resource_id` varchar(256) NOT NULL,
  `branch_type` varchar(8) NOT NULL,
  `status` tinyint(4) NOT NULL,
  `client_id` varchar(64) NOT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`branch_id`),
  KEY `idx_xid` (`xid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2) 在 Apache Dubbo 中使用 Seata。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.6</version>
</dependency>

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>1.4.2</version>
</dependency>

<dubbo:reference id="xxxService" interface="com.xxx.XXXService" 
url="dubbo://localhost:20880"
check="false" timeout="5000">
    <dubbo:method name="xxxMethod" 
        oninvoke="seata.oninvoke(/com.xxx.XXXService/xxxMethod/1)"
        onreturn="seata.onreturn()" onthrow="seata.onthrow()" />
</dubbo:reference>

<bean id="seata" class="io.seata.rm.easyrpc.EasyRpcTCCLClientFilter"/>

3) 在 Spring Boot 中使用 Seata。

@Bean
public GlobalTransactionScanner globalTransactionScanner() {
    return new GlobalTransactionScanner("my_test_tx_group", "default");
}

@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
    return transactionManager(dataSource);
}

4) 使用 Seata 的分布式事务控制台。

https://github.com/seata/seata/releases 中下载最新版本。

五、Seata AT 的优缺点

优点:

1) 支持各种分布式环境下的事务处理,方便快捷。

2) 提供完整的管理控制台,可以查看分布式事务的状态和操作记录。

3) 拥有强大的事件监听和分布式锁机制,保证分布式事务的可靠处理。

缺点:

1) 需要引入第三方库,系统接入难度较高。

2) 可能会因为分布式环境的复杂性而产生一些问题和难以解决的 Bug。

六、结语

Seata AT 为分布式系统中的事务处理提供了最佳解决方案,可以帮助用户快速、高效地完成分布式事务控制。通过使用 Seata AT,用户可以大大降低系统运维成本,提高系统的可靠性和稳定性。

原创文章,作者:FDJKT,如若转载,请注明出处:https://www.506064.com/n/331988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FDJKTFDJKT
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相关推荐

  • at least one option must be selected

    问题解答:当我们需要用户在一系列选项中选择至少一项时,我们需要对用户进行限制,即“at least one option must be selected”(至少选择一项)。 一、…

    编程 2025-04-29
  • Python基本索引用法介绍

    Python基本索引是指通过下标来获取列表、元组、字符串等数据类型中的元素。下面将从多个方面对Python基本索引进行详细的阐述。 一、列表(List)的基本索引 列表是Pytho…

    编程 2025-04-29
  • Python基本数字类型

    本文将介绍Python中基本数字类型,包括整型、布尔型、浮点型、复数型,并提供相应的代码示例以便读者更好的理解。 一、整型 整型即整数类型,Python中的整型没有大小限制,所以可…

    编程 2025-04-29
  • Python基本统计量计算

    本文将从多个方面详细介绍Python中基本统计量计算的方法。 一、均值 均值是一组数据的平均值,也就是将所有数据相加后再除以数据个数。 在Python中,可以使用numpy库中的m…

    编程 2025-04-29
  • Python程序的三种基本控制结构

    控制结构是编程语言中非常重要的一部分,它们指导着程序如何在不同的情况下执行相应的指令。Python作为一种高级编程语言,也拥有三种基本的控制结构:顺序结构、选择结构和循环结构。 一…

    编程 2025-04-29
  • Python三种基本输入元素

    本文将从多个方面对于Python三种基本输入元素进行详细的阐述并给出代码示例。 一、Python三种基本输入元素解答 Python三种基本输入元素包括命令行参数、标准输入和文件输入…

    编程 2025-04-28
  • Python基本操作:从入门到精通

    Python是一个功能强大的编程语言,有着简单易学的语法和广泛的用途。本篇文章将以Python基本操作为主要内容,从多个方面介绍Python的常用操作和技巧,帮助你快速学会Pyth…

    编程 2025-04-27
  • Seata GitHub详解

    一、Seata简介 Seata是一个基于Java的分布式事务管理解决方案,它通过一个全局事务ID来协调各个分支事务的执行结果,从而实现了分布式事务的一致性,同时保证了高性能的处理能…

    编程 2025-04-23
  • 中兴C600基本命令详解

    一、登录 登录命令为login,格式为:login {用户名} {密码} 例如:login admin 123456 若用户名或密码错误,则会提示错误信息 二、配置TELNET登录…

    编程 2025-04-23
  • Python语言基本控制结构详解

    Python是一种解释型高级编程语言,具有易学、简洁、灵活、可扩展等诸多特点。其基本控制结构包括条件语句、循环语句、函数和模块,能够帮助程序员实现复杂的逻辑、控制流和数据处理。本文…

    编程 2025-04-22

发表回复

登录后才能评论