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

阿里巴巴开源的 分布式事务解决方案Seata

Seata 是阿里巴巴开源的 分布式事务解决方案,全称是 Simple Extensible Autonomous Transaction Architecture。Seata 的目标是提供一个 高性能且易于使用的分布式事务服务,来解决微服务架构中最常见、最头疼的问题之一:分布式事务一致性问题


一、为什么需要 Seata?

在微服务架构中,一个业务操作通常会涉及到多个服务,比如一个电商下单流程可能会调用:

  • 订单服务
  • 库存服务
  • 账户服务

这些服务背后分别使用不同的数据库或存储系统,传统的数据库事务(如 JDBC 本地事务)无法跨数据库生效。这时候如果某一步失败,其它服务就可能出现数据不一致,造成严重问题。

于是需要一种机制来协调多个服务或数据库中的事务操作,这就是“分布式事务”。


二、Seata 能解决什么问题?

Seata 提供了完整的分布式事务解决方案,具有以下特点:

特性说明
支持多种事务模式包括 AT、TCC、SAGA、XA
事务隔离性强尽量保证 ACID
高性能基于异步处理和事务日志
服务自动注册/发现支持注册中心(如 Nacos、Eureka)
Spring Cloud / Dubbo / gRPC 支持与主流 RPC 框架集成
支持多种数据库MySQL、Oracle、PostgreSQL 等

三、Seata 架构解析(重点)

Seata 架构主要由三个核心角色组成:

 ┌───────────┐        ┌───────────────┐        ┌───────────┐│           │        │               │        │           ││  RM(资源管理器)│<------>│ TC(事务协调者) │<------>│ TM(事务管理器)││           │        │               │        │           │└───────────┘        └───────────────┘        └───────────┘

1. TM(Transaction Manager,事务管理器)

  • 负责开启全局事务,提交或回滚全局事务。
  • 由业务系统发起。
  • 使用 @GlobalTransactional 注解标注分布式事务的入口。

2. TC(Transaction Coordinator,事务协调器)

  • 核心组件。
  • 维护全局事务的状态。
  • 负责协调各 RM 的提交/回滚操作。
  • 相当于“分布式事务调度中心”,是一个独立部署的服务。

3. RM(Resource Manager,资源管理器)

  • 管理分支事务的资源(如数据库连接、SQL 等)。
  • 把事务状态通知 TC。
  • 在 TC 发出命令时执行 本地提交或回滚

四、事务流程详解(以 AT 模式为例)

AT 模式(Automatic Transaction)是 Seata 最主流也最简单的事务模式,适用于关系型数据库 + 业务无强逻辑依赖的场景。

1. 开启全局事务(由 TM 发起)

@GlobalTransactional
public void placeOrder() {orderService.createOrder();stockService.deductStock();accountService.deductMoney();
}

TM 向 TC 发起全局事务创建请求。


2. 各服务执行本地业务逻辑(由 RM 管理)

比如订单服务执行:

insert into orders ...

此时 RM 拦截 SQL,自动生成:

  • 前镜像(Before Image):更新前的数据快照
  • 后镜像(After Image):更新后的数据快照
  • 并记录到 undo_log 表中,保证可以回滚

3. 全局事务提交或回滚

  • 如果所有服务调用成功,TM 通知 TC 执行“全局提交”

    • TC 通知各 RM 提交本地事务
    • RM 删除 undo_log
  • 如果中间某个服务失败或抛出异常,TM 通知 TC 执行“全局回滚”

    • TC 通知各 RM 回滚本地事务
    • RM 利用 undo_log 中的前镜像还原数据

五、事务模式比较

模式说明适用场景
AT自动事务,拦截 SQL,生成 undo_log强一致性、关系型数据库
TCCTry-Confirm-Cancel 手动编排业务强逻辑控制、幂等性要求高
SAGA有状态长事务,定义补偿逻辑异步解耦场景、柔性事务
XA标准的两阶段提交协议高一致性要求、数据库支持 XA

六、AT 模式示意图

用户请求↓
TM(开启全局事务)↓
业务调用A  → RM拦截SQL并生成undo_log↓
业务调用B  → RM拦截SQL并生成undo_log↓
业务调用C  → RM拦截SQL并生成undo_log↓
TM 提交 or 回滚↓
TC 通知各 RM 提交/回滚↓
RM 提交或根据 undo_log 回滚数据

七、使用示例(Spring Cloud + Seata)

1. 引入依赖

<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.7.0</version>
</dependency>

2. 配置文件(application.yml)

seata:enabled: truetx-service-group: my_tx_groupservice:vgroup-mapping:my_tx_group: defaultregistry:type: nacosnacos:server-addr: 127.0.0.1:8848

3. 启用分布式事务

@GlobalTransactional
public void createOrder() {orderService.create();storageService.deduct();accountService.debit();
}

八、undo_log 表

Seata 会为每个参与分支自动记录一张 undo_log 表,格式如下:

| id | branch_id | xid | context | rollback_info | log_status |

这是 AT 模式中最关键的本地回滚机制支撑,确保即便某服务异常也可恢复数据。


九、Seata 与其他解决方案对比

方案特点
Seata(AT 模式)自动化强、开发简单、侵入低、适合小中型分布式系统
TCC手动控制,适合需要幂等、校验、复杂回滚逻辑
MQ事务(RocketMQ事务消息)最终一致性,适合异步操作
本地消息表 + 补偿灵活性强但开发复杂,适合企业定制场景

十、总结

维度说明
使用简单性⭐⭐⭐⭐⭐(@GlobalTransactional 即可)
扩展性⭐⭐⭐⭐(支持多种事务模式)
性能⭐⭐⭐⭐(异步化、压缩 undo_log)
场景适配度⭐⭐⭐⭐⭐(适配大部分微服务)
依赖性需部署 TC Server,数据库需支持 undo_log 表

如果你需要:

  • 快速实现微服务分布式事务
  • 不希望侵入业务代码
  • 希望控制性能与一致性的权衡

那么 Seata AT 模式 是当前 Java 生态下非常值得使用的方案。

http://www.lryc.cn/news/572889.html

相关文章:

  • A028自动升降机+S71200+HMI+主电路图+外部接线图+流程图+IO分配表
  • HTTP与HTTPS深度解析:从明文传输到安全通信的演进之路
  • Hadoop 技术生态体系
  • 京运通601908,一只值得长期跟踪操作的波段投资标的,两个指标即可做好
  • 迅为RK3562开发板Android 设置系统默认不锁屏
  • [论文阅读] 人工智能+软件工程 | 用大语言模型架起软件需求形式化的桥梁
  • 游戏架构中的第三方SDK集成艺术:构建安全高效的接入体系
  • subprocess.check_output和stdout有什么不同 还有run和popen
  • Docker 常用运维命令
  • 【系统规划与管理师第二版】1.3 新一代信息技术及发展
  • React ahooks——useRequest
  • 空壳V3.0,免费10开!
  • PowerShell批量处理文件名称/内容的修改
  • 【量化】策略交易之相对强弱指数策略(RSI)
  • websocket入门到实战(详解websocket,实战聊天室,消息推送,springboot+vue)
  • 【Docker基础】Docker镜像管理:docker commit详解
  • 【flink】 flink 读取debezium-json数据获取数据操作类型op/rowkind方法
  • “地标界爱马仕”再拓疆域:世酒中菜联袂赤水金钗石斛定义中国GI
  • GM DC Monitor v2.0 卸载教程
  • 通达信 多空寻龙指标系统:精准捕捉趋势转折与强势启动信号 幅图指标
  • Java八股文——消息队列「场景篇」
  • 思辨场域丨AR技术如何重塑未来学术会议体验?
  • 汽车加气站操作工考试题库含答案【最新】
  • 华为 FreeArc耳机不弹窗?
  • 容器技术人们与DOCKER环境部署
  • OSPF 路由协议基础实验
  • ZeroSearch:阿里开源无需外接搜索引擎的RL框架,显著提升LLM的搜索能力!!
  • AMHS工程项目中-MCS-STKC之间的office 测试场景的介绍
  • 搭建pikachu靶场
  • 【云创智城】YunCharge充电桩系统源码实现云快充协议深度解析与Java技术实践:打造高效充电桩运营系统