Alibaba Spring Cloud 二 Seata 的详细介绍、使用场景以及集成方法

Seata 是一个开源的分布式事务解决方案,它由阿里巴巴开源,专注于解决微服务架构中的分布式事务问题。它支持高性能的分布式事务处理,提供了多种事务模型(AT、TCC、SAGA 和 XA),并与 Spring Boot 和 Spring Cloud 深度集成。

以下是关于 Seata 的详细介绍、使用场景以及集成方法。


1. Seata 的核心概念

1.1 分布式事务的挑战

  • 在微服务架构中,每个服务通常拥有独立的数据库,传统的本地事务无法跨服务进行控制。
  • 常见的分布式事务场景:
    • 创建订单时,需要同时扣减库存和支付金额。
    • 资金转账系统,涉及多个账户的资金一致性。

1.2 Seata 的架构

  1. Transaction Coordinator (TC)

    • 事务协调者,管理全局事务的生命周期。
    • 负责维护全局事务状态,并协调各分支事务的提交或回滚。
  2. Transaction Manager ™

    • 事务管理器,定义全局事务的范围,发起事务的提交或回滚。
  3. Resource Manager (RM)

    • 资源管理器,管理分支事务的资源(如数据库连接)。
    • 负责提交或回滚分支事务。

2. 事务模型

2.1 AT 模式(Automatic Transaction)

  • 自动事务管理,基于二阶段提交协议(2PC)。
  • 适用于关系型数据库事务(MySQL、PostgreSQL 等)。
  • 阶段 1:业务方法执行,生成回滚日志。
  • 阶段 2
    • 提交: 事务成功时,提交操作。
    • 回滚: 事务失败时,根据回滚日志恢复数据。

2.2 TCC 模式(Try-Confirm-Cancel)

  • 手动定义分支事务的三个阶段:
    1. Try:预留资源。
    2. Confirm:提交操作。
    3. Cancel:释放资源。
  • 适用于需要高性能和自定义事务控制的场景。

2.3 SAGA 模式

  • 基于长事务的补偿机制,每个步骤都有前向和回滚操作。
  • 适用于业务操作复杂、状态可补偿的场景。

2.4 XA 模式

  • 基于数据库的两阶段提交协议(XA)。
  • 性能较差,适用于事务一致性要求极高的场景。

3. Seata 的使用场景

  1. 电商系统:
    • 创建订单时,扣减库存、扣款,确保一致性。
  2. 支付系统:
    • 资金转账,多个账户的余额修改。
  3. 物流系统:
    • 订单发货后,更新库存和物流状态。
  4. 金融系统:
    • 贷款审批,涉及账户、利息、合同等多个系统。

4. Seata 的集成步骤

4.1 环境准备

下载和启动 Seata Server
  1. 下载 Seata Server:Seata GitHub。
  2. 修改 conf/registry.conf 配置文件,指定注册中心和配置中心(如 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"}
}
  1. 启动 Seata Server:
    sh bin/seata-server.sh -p 8091 -m file
    

4.2 Spring Boot 集成

依赖引入

pom.xml 中添加依赖:

<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.6.1</version>
</dependency>
配置 Seata

application.yml 中添加配置:

seata:enabled: truetx-service-group: my_tx_group
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: root
创建全局事务

使用 @GlobalTransactional 注解开启分布式事务:

@Service
public class OrderService {@Autowiredprivate InventoryService inventoryService;@Autowiredprivate PaymentService paymentService;@GlobalTransactional(name = "create-order", rollbackFor = Exception.class)public void createOrder(Order order) {// 保存订单orderRepository.save(order);// 扣减库存inventoryService.deductStock(order.getProductId(), order.getQuantity());// 扣款paymentService.processPayment(order.getUserId(), order.getTotalAmount());// 如果出现异常,全局回滚if (order.getTotalAmount().compareTo(BigDecimal.ZERO) <= 0) {throw new RuntimeException("无效金额");}}
}

4.3 数据库支持

全局事务表

Seata 需要一张 global_table 存储全局事务信息。SQL 示例:

CREATE TABLE global_table (xid VARCHAR(128) NOT NULL,transaction_id BIGINT,status TINYINT,gmt_create TIMESTAMP,gmt_modified TIMESTAMP,PRIMARY KEY (xid)
);
回滚日志表

Seata 的 AT 模式需要存储回滚日志:

CREATE TABLE undo_log (id BIGINT AUTO_INCREMENT,branch_id BIGINT NOT NULL,xid VARCHAR(128) NOT NULL,rollback_info LONGTEXT NOT NULL,log_status INT NOT NULL,log_created TIMESTAMP NOT NULL,log_modified TIMESTAMP NOT NULL,PRIMARY KEY (id)
);

5. 运行与测试

测试步骤

  1. 启动 Seata Server 和相关服务(Nacos、数据库)。
  2. 运行 Spring Boot 项目。
  3. 模拟事务成功:
    • 创建订单,扣减库存,扣款。
  4. 模拟事务失败:
    • 在事务中抛出异常,观察全局回滚。

6. 常见问题与优化

常见问题

  1. 事务未回滚:

    • 检查 @GlobalTransactional 是否正确配置。
    • 确保 Seata Server 正常运行。
  2. 性能问题:

    • AT 模式适合高性能场景,但需要占用更多数据库资源。
    • 在性能要求较高的场景中,优先选择 TCC 模式。

优化建议

  1. 连接池配置:
    • 使用 HikariCP 提升数据库连接性能。
  2. 分库分表支持:
    • 在分库分表场景中,使用 Seata 结合 ShardingSphere。

7. Seata 与其他分布式事务框架对比

特性SeataTCCSAGAXA
易用性
性能高(AT)
适用场景电商、金融自定义事务长事务强一致性
事务隔离

总结

Seata 提供了多种事务模型,能够高效处理分布式事务问题,特别适合微服务架构下的复杂场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT结合Excel辅助学术数据分析详细步骤分享!

目录 一.Excel在学术论文中的作用✔ 二.Excel的提示词✔ 三. 编写 Excel 命令 四. 编写宏 五. 执行复杂的任务 六. 将 ChatGPT 变成有用的 Excel 助手 一.Excel在学术论文中的作用✔ Excel作为一种广泛使用的电子表格软件&#xff0c;在学术论文中可以发挥多种重要作用&a…

国内有哪些著名的CRM系统提供商?

嘿&#xff0c;你有没有想过&#xff0c;在这个信息爆炸的时代里&#xff0c;企业怎么才能更好地管理客户关系呢&#xff1f;答案就是使用高效的CRM系统。今天我就来给大家聊聊那些在国际上非常有名的CRM系统提供商吧。 悟空CRM 首先不得不提的就是悟空CRM了&#xff01;这可…

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下的…

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…

9. 神经网络(一.神经元模型)

首先&#xff0c;先看一个简化的生物神经元结构&#xff1a; 生物神经元有多种类型&#xff0c;内部也有复杂的结构&#xff0c;但是可以把单个神经元简化为3部分组成&#xff1a; 树突&#xff1a;一个神经元往往有多个树突&#xff0c;用于接收传入的信息。轴突&#xff1a;…

Web 音视频(二)在浏览器中解析视频

前言 浏览器中已经能直接播放视频&#xff0c;为什么还需要手动写代码解析&#xff1f; 因为&#xff0c;某些场景需要对视频进行更细致的处理&#xff0c;比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之&#xff0c;除了最单纯的视频播放外&…

ETLCloud在iPaas中的是关键角色?

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…

以太网实战AD采集上传上位机——FPGA学习笔记27

一、设计目标 使用FPGA实现AD模块驱动采集模拟电压&#xff0c;通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块&#xff08;ad_10bit_to_16bit&#xff09;&#xff1a;为了方便数据传输&#xff0c;数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…

YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora

1.学习哔哩哔哩《YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战》 炮哥带你学视频链接 第5章 YOLOv3实战 5.1 YOLOv3实战先导 5.2 pycharm与anaconda的安装 之前已经安装过了&#xff0c;见Pytorch框架与经典卷积神经网络与实战第一天|安装PyCharm&Anaconda&#xff0…

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有&#xff1a;SQLite studio 和 SCADA DIAView。详细的可成内容大概如下&#xff1a; 1、SQLite 可视化管理工具SQLite Studio &#xff1a;打开数据库和查询数据&#xff1b;查看视频 2、创建6个变量&#x…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?

目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…

深度学习|表示学习|卷积神经网络|由参数共享引出的特征图|08

如是我闻&#xff1a; Feature Map&#xff08;特征图&#xff09;的概念与 Parameter Sharing&#xff08;参数共享&#xff09;密切相关。换句话说&#xff0c;参数共享是生成 Feature Map 的基础。Feature Map 是卷积操作的核心产物&#xff0c;而卷积操作的高效性正是由参数…

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…

ARP 表、MAC 表、路由表、跨网段 ARP

文章目录 一、ARP 表1、PC2、路由器 - AR22203、交换机 - S57004、什么样的设备会有 ARP 表&#xff1f; 二、MAC 表什么样的设备会有 MAC 表&#xff1f; 三、路由表什么样的设备会有路由表&#xff1f; 四、抓取跨网段 ARP 包 所谓 “透明” 就是指不用做任何配置 一、ARP 表…

算法10(力扣20)-有效的括号

1、问题 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类…

每日一题——二叉树的前序遍历和中序遍历和后序遍历

文章目录 二叉树的前序、中序与后序遍历题目描述数据范围&#xff1a;示例&#xff1a;示例 1&#xff1a; 解题思路1. 递归法2. 迭代法 代码实现&#xff08;递归法&#xff09;代码解析示例输出复杂度分析 中序遍历后序遍历 二叉树的前序、中序与后序遍历 题目描述 给定一棵…

【优选算法】8----四数之和

有看过我上篇算法博客并且去做过的铁子们&#xff0c;对这道题的话应该就不会那么陌生了&#xff0c;因为这两道题 的解题思路有着异曲同工之妙~ -----------------------------------------begin------------------------------------- 题目解析&#xff1a; 跟三数之和就多了…