Seata 简介

Seata 是阿里巴巴开源的分布式事务解决方案,旨在为微服务架构、云原生应用提供高性能、易集成的分布式事务支持。它支持多种事务模式(如 AT、TCC、Saga、XA),适用于不同业务场景。


一、概述

1. 官方介绍

Seata(Simple Extensible Autonomous Transaction Architecture) 是一个开源的分布式事务中间件,致力于在分布式系统中提供高可用、高性能、易用的全局事务协调能力。

2. 主要特性

特性描述
多种事务模式支持 AT、TCC、Saga、XA 等模式
高性能基于异步、无锁机制设计
易集成支持 Spring Cloud、Dubbo、Motan 等主流框架
可扩展性强支持自定义资源、适配器、事务模式等
跨语言支持提供多语言客户端(Java 为主)

二、核心组件

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

角色英文名功能描述
事务协调器Transaction Coordinator (TC)统一管理全局事务生命周期,负责协调事务提交或回滚
事务管理器Transaction Manager ™控制全局事务边界,发起事务并决定是否提交或回滚
资源管理器Resource Manager (RM)管理本地事务分支,与 TC 通信注册和汇报事务状态

三、事务模式

Seata 支持四种主要事务模式,每种适用于不同的使用场景。

1. AT 模式(Auto Transaction Mode)

原理:

  • 利用数据库的本地事务实现“自动补偿”。
  • 在本地事务执行前记录“before image”,执行后记录“after image”,形成 undo log。
  • 如果事务失败,则根据 undo log 回滚到 before image。

流程:

  1. TM 向 TC 注册全局事务;
  2. RM 执行本地 SQL,并生成 undo log;
  3. RM 向 TC 报告事务状态;
  4. TM 决定提交或回滚;
  5. TC 协调所有 RM 提交或回滚。

优点:

  • 对业务无侵入(仅需注解 @GlobalTransactional
  • 实现简单,适合已有业务系统

缺点:

  • 依赖数据库(目前只支持 MySQL、Oracle、PostgreSQL)
  • 不支持复杂业务逻辑补偿
  • undo log 存储开销

适用场景:

  • 数据库操作为主的业务(如订单创建、库存扣减)

2. TCC 模式(Try - Confirm - Cancel)

原理:

  • 需要开发者手动实现 Try、Confirm、Cancel 三个阶段的业务逻辑。
  • 通过幂等控制保证最终一致性。

示例代码:

@TwoPhaseBusinessAction(name = "deductStock")
public boolean prepare(BusinessActionContext ctx);

@Commit
public boolean commit(BusinessActionContext ctx);

@Rollback
public boolean rollback(BusinessActionContext ctx);

优点:

  • 高性能、高可用
  • 可用于非数据库资源(如消息队列、外部服务)

缺点:

  • 业务侵入性强
  • 需要设计反向补偿逻辑
  • 幂等处理复杂

适用场景:

  • 订单支付、积分兑换、资金转移等需要精确控制的业务

3. Saga 模式

原理:

  • 将整个事务拆分为多个本地事务,每个步骤都有对应的补偿操作。
  • 若某一步失败,则依次执行前面所有步骤的逆向操作。

优点:

  • 无锁、异步、快速响应
  • 支持长周期任务

缺点:

  • 不支持事务回滚到中间状态
  • 补偿逻辑复杂
  • 日志追踪困难

适用场景:

  • 航班预订、物流调度、审批流程等长流程业务

4. XA 模式

原理:

  • 基于标准的 XA 协议(两阶段提交),利用数据库的 XA 支持来实现分布式事务。

优点:

  • 强一致性
  • 标准化协议,兼容性好

缺点:

  • 性能差(同步阻塞)
  • 数据库支持有限
  • 不推荐用于高并发场景

适用场景:

  • 对一致性要求极高、并发量低的系统(如金融核心系统)

四、部署方式

Seata Server 支持以下几种部署方式:

部署方式描述
单机模式快速启动测试环境
集群模式生产环境推荐,支持 HA 和负载均衡
Kubernetes支持 Helm Chart 部署,适应云原生环境
Docker提供官方镜像,方便容器化部署

Seata Server 启动参数配置

store.mode=file/db
server.port=8091
registry.type=file/nacos/eureka/consul/zk

五、事务日志存储

Seata 使用日志来记录事务的状态变化,主要有两种存储方式:

存储类型描述优缺点
file存储在文件中(默认)简单、轻量,但不支持 HA
db存储在数据库中(MySQL、PostgreSQL)支持集群、持久化,适合生产
redis使用 Redis 缓存事务日志性能高,但数据可能丢失

六、事务生命周期

  1. TM 发起全局事务

    • 向 TC 注册全局事务,获取 XID(全局事务 ID)
  2. RM 加入事务分支

    • 每个本地事务作为一个分支,携带 XID 注册到 TC
  3. 执行本地事务

    • RM 执行本地 SQL 或业务逻辑,记录 undo log
  4. TM 提交或回滚

    • TM 决定事务是提交还是回滚
  5. TC 协调 RM 提交或回滚

    • TC 通知所有 RM 提交或执行补偿
  6. 事务完成

    • 清理事务日志、释放资源

七、优势与局限性

优势局限性
多种事务模式可选AT 模式对数据库有依赖
支持主流微服务框架TCC 模式开发成本高
高可用、高性能Saga 模式补偿逻辑复杂
社区活跃、文档完善XA 模式性能差

八、典型应用场景

场景推荐模式
订单创建、库存扣减AT
支付、转账、积分兑换TCC
航班预订、物流调度Saga
金融交易、清算系统XA(慎用)

九、实践建议

  1. 优先选择 AT 模式:适用于大多数基于数据库的业务,开发成本低。
  2. TCC 模式注意幂等性:确保 Confirm/Cancel 操作可以重复执行。
  3. Saga 模式设计补偿逻辑:确保失败时能够正确回退。
  4. 生产环境使用 DB 存储事务日志:避免因宕机导致数据丢失。
  5. 配合 Sentinel 实现熔断降级:提升系统健壮性。

十、相关生态整合

组件整合情况
Spring Cloud Alibaba完美集成,通过 starter 自动装配
Dubbo支持 Dubbo 2.x / 3.x
Nacos默认注册中心和配置中心
RocketMQ / Kafka可结合实现异步事务消息
Sentinel支持熔断、限流、降级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值