关注△mikechen△,十余年BAT架构经验倾囊相授!

分布式是大型架构的基石,下面我重点详解Seata 分布式事务@mikechen
文章来源:mikechen.cc
Seata
Seata 是阿里巴巴开源的分布式事务框架,核心目标是以最小侵入性保障分布式业务的一致性。
它提供事务协调器(TC)、事务管理(Global/Branch)和多种事务模式(AT、TCC、Saga 等)。

既支持数据库层面自动补偿,也支持程序级补偿机制。
Seata 强调性能与可扩展性,适用于电商、金融等对数据一致性要求较高的场景。
分布式事务
分布式事务,指在多个独立的资源管理器(例如不同服务或数据库)之间。
保证原子性、一致性、隔离性和持久性(ACID)的操作集合。
挑战主要来自网络延迟、部分故障、服务自治和多种数据存储。
为应对这些挑战,业界出现了两类常用思路:强一致性(如分布式两阶段提交)与最终一致性(补偿或补偿式编排)。
Seata 集成了若干实际可用模式以平衡一致性、性能与可用性。
Seata分布式事务原理
Seata 架构,如下图所示:

Transaction Coordinator(TC)
事务协调器,负责事务状态管理、全局事务的创建与最终决议。
Transaction Manager(TM)
发起全局事务的人或模块,负责开启/提交/回滚全局事务。
Resource Manager(RM)
各业务资源侧(一般为微服务或数据库)的分支事务管理器,负责注册分支事务并执行本地操作与回滚/补偿准备。
Seata工作流程
Seata 工作流程,如下所示:

┌───────────────────────────────┐│ TC (协调者)│└──────────────▲────────────────┘│┌─────────────────┼───────────────────┐│││┌────┴────┐┌────┴────┐┌────┴────┐│ TM ││ RM ││ RM ││(事务管理)││(资源管理)││(资源管理)│└────┬────┘└────┬────┘└────┬────┘││││----开启事务---->│││<---注册分支----│││------提交/回滚命令------------->│
工作流程概述:
- TM 向 TC 申请开启全局事务;
- 各个 RM 注册分支事务;
- TM 发起提交或回滚;
- TC 协调各 RM 执行;
- 确保所有分支事务保持一致。
Seata事务模式
事务模式:AT、TCC、Saga 等。

AT(Automatic Transaction,基于行级锁与 undo/redo 日志)
特点:对应用侵入性最小,基于数据库的 undo/redo 日志自动回滚或补偿,适用于关系型数据库场景。
优点:实现透明,性能较好,易于迁移已有应用。
局限:依赖数据库特性,不适用于非关系型存储或存在长事务场景。
TCC(Try-Confirm-Cancel)
特点:显式的三段式接口:Try(资源预留)、Confirm(确认提交)、Cancel(撤销释放)。由业务方实现幂等与补偿逻辑。
优点:对业务行为更可控,适合需要显式预留和释放资源的场景。
局限:开发工作量较大,需要实现三套接口与幂等性保证。
Saga(补偿式长事务编排)
特点:将一个全局事务拆成一系列局部事务,若某步失败则按逆序调用补偿事务以消除已生效的步骤。
优点:适合长事务、跨多个服务与异步场景,可实现最终一致性。
局限:补偿逻辑复杂,事务隔离性较弱,需要业务设计支持可补偿操作。
Seata 在设计上支持多种模式以满足不同业务与技术栈需求。



