0%

Seata简介

Seata 简介:分布式事务的一站式解决方案

在微服务架构中,跨服务的事务一致性是典型难题。Seata(Simple Extensible Autonomous Transaction Architecture)作为阿里开源的分布式事务解决方案,通过简洁的架构设计和高效的处理机制,为分布式事务提供了高性能、易集成的解决方案。

Seata 的核心目标

Seata 旨在解决微服务拆分后的数据一致性问题,核心目标包括:

  • 提供简单易用的分布式事务服务,降低开发成本;
  • 保证分布式事务的 ACID 特性(原子性、一致性、隔离性、持久性);
  • 支持高性能事务处理,减少对业务系统的性能影响;
  • 兼容主流框架(Spring Cloud、Dubbo 等)和存储中间件(MySQL、Redis 等)。

Seata 的核心组成:一 ID + 三组件

Seata 的架构由一个全局事务 ID三个核心组件构成,协同完成分布式事务的管理。

Transaction ID(全局事务 ID)

  • 定义:全局唯一的事务标识(XID),用于关联分布式事务中的所有分支事务;
  • 作用:在跨服务调用时,通过 XID 追踪整个事务链路,确保所有分支事务属于同一全局事务。

三大核心组件

(1)TC(Transaction Coordinator - 事务协调者)
  • 角色:分布式事务的 “指挥中心”,独立部署的 Seata Server 即 TC;
  • 职责:
    • 维护全局事务和分支事务的状态(如 “开始”“提交中”“回滚中”);
    • 接收 TM 的请求,驱动全局事务的提交或回滚;
    • 协调 RM 执行分支事务的提交或回滚。
(2)TM(Transaction Manager - 事务管理器)
  • 角色:全局事务的发起者(如订单服务);
  • 职责:
    • 定义全局事务的范围(标记事务的开始、提交、回滚);
    • 向 TC 申请创建全局事务,获取 XID;
    • 在事务结束时,向 TC 发起全局提交或回滚请求。
  • 使用方式:通过@GlobalTransactional注解标记全局事务入口方法。
(3)RM(Resource Manager - 资源管理器)
  • 角色:分布式事务的参与者(如库存服务、支付服务);
  • 职责:
    • 管理分支事务涉及的本地资源(如数据库连接);
    • 向 TC 注册分支事务,将其关联到 XID 对应的全局事务;
    • 接收 TC 的指令,执行分支事务的提交或回滚。

Seata 的事务处理流程

Seata 通过 “全局事务 + 分支事务” 的双层结构实现分布式事务管理,核心流程如下:

  1. 开启全局事务
    • TM(如订单服务)调用业务方法,通过@GlobalTransactional触发全局事务;
    • TM 向 TC 申请创建全局事务,TC 生成 XID 并返回给 TM;
    • XID 通过服务调用链路(如 Feign、Dubbo)传播到所有参与的微服务。
  2. 注册分支事务
    • 每个 RM(如库存服务、支付服务)在执行本地事务时,向 TC 注册分支事务,将其关联到 XID;
    • TC 记录分支事务与 XID 的映射关系,跟踪所有分支的状态。
  3. 执行分支事务
    • RM 执行本地业务逻辑(如扣减库存、创建支付记录),并将本地事务状态报告给 TC;
    • 若所有分支事务执行成功,TM 向 TC 发起全局提交请求;
    • 若任一分支事务执行失败,TM 向 TC 发起全局回滚请求。
  4. 全局提交 / 回滚
    • TC 收到全局提交请求后,通知所有 RM 提交各自的分支事务;
    • TC 收到全局回滚请求后,通知所有 RM 回滚各自的分支事务;
    • 所有 RM 执行完毕后,向 TC 反馈结果,TC 更新全局事务状态为 “完成”。

Seata 的事务模式

Seata 支持多种分布式事务模式,适配不同业务场景:

  1. AT 模式(Automatic Transaction)
    • 特点:无侵入式设计,基于本地事务和 undo 日志实现自动提交 / 回滚;
    • 原理:
      • 执行本地事务时,Seata 拦截 SQL,生成 undo 日志(用于回滚);
      • 全局提交时,异步删除 undo 日志;全局回滚时,通过 undo 日志恢复数据;
    • 适用场景:纯关系型数据库场景,要求高性能且开发侵入小。
  2. TCC 模式(Try-Confirm-Cancel)
    • 特点:业务侵入式设计,需手动实现 Try(资源检查 / 预留)、Confirm(确认操作)、Cancel(取消操作)三个接口;
    • 适用场景:非关系型数据库(如 Redis)或复杂业务场景,需要自定义资源控制逻辑。
  3. SAGA 模式
    • 特点:长事务模式,基于状态机和补偿事务实现;
    • 原理:将分布式事务拆分为多个本地事务,每个事务对应一个补偿操作,若某步失败则执行反向补偿;
    • 适用场景:长事务场景(如订单超时取消),业务流程可拆分且支持补偿。
  4. XA 模式
    • 特点:基于数据库 XA 协议(强一致性),依赖数据库本身的事务支持;
    • 适用场景:对一致性要求极高的场景,但性能较低,适合短事务。

Seata 的优势

  • 简单易用:通过注解(@GlobalTransactional)快速集成,开发者无需关注底层细节;
  • 高性能:AT 模式下通过本地事务 + 异步提交,性能接近本地事务;
  • 灵活性:支持多种事务模式,适配不同业务场景;
  • 生态兼容:无缝集成 Spring Cloud、Dubbo 等微服务框架,支持 MySQL、Oracle 等主流数据库。

总结

Seata 通过 “一 ID + 三组件” 的架构,为分布式事务提供了灵活、高效的解决方案。其核心在于通过 TC 协调全局事务,TM 定义事务范围,RM 执行分支事务,最终保证跨服务数据的一致性

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10