连载中 11/18

Seata 全景:四模式一张图选型

2026-06-19 · 5040 阅读 · 0 评论 · 0 赞

从原理到工程

前九篇讲透了原理,但「自研」二字说起来轻巧——TCC 的事务控制表、Saga 的状态机引擎、XA 的协调者,每个都是月级的工程量。Seata(阿里开源,前身 Fescar)把这些模式工程化成了开箱即用的框架,四种模式对应前面讲过的四种思想。本篇立全景,下篇深挖它最招牌的 AT 模式。

三个角色

Seata 的架构是三个字母:TC(Transaction Coordinator,事务协调器)——独立部署的服务端,维护全局事务与分支事务的状态,驱动二阶段提交或回滚;TM(Transaction Manager)——嵌在事务发起方(如订单服务)里,负责开启、提交、回滚全局事务;RM(Resource Manager)——嵌在每个参与者里,管理分支事务,向 TC 注册并汇报状态。第 3 篇 2PC 的「协调者单点」在这里被 TC 集群化了——TC 用数据库或 Redis 存状态,多实例部署,不再是单点。

四模式速览

AT 模式(Automatic Transaction):招牌模式。业务代码零改造——就是一个 @GlobalTransactional 注解。框架在第一阶段拦截 SQL,自动记录数据前后镜像(undo_log),第二阶段提交时异步删日志,回滚时按镜像反向补偿生成相反 SQL。原理下篇专讲,这里记住定位:侵入最低、支持 MySQL 等关系库、默认最终一致。

TCC 模式:第 4、5 篇的工程化。业务自己实现 Try/Confirm/Cancel 三个方法,框架负责调度、空回滚、幂等、悬挂防御(那套事务控制表框架帮你建好)。性能上限最高的模式,侵入也最大。

Saga 模式:第 6 篇的工程化。流程用 JSON 状态机定义,正向服务加补偿服务,状态机引擎驱动执行与逆序回滚,长流程、跨企业集成场景的主将。

XA 模式:第 3 篇的工程化。利用数据库原生 XA 协议,强一致,性能最低,留给低并发强一致场景。

四模式对比

模式侵入性一致性性能典型场景
AT无(注解级)最终一致中高常规微服务链路
TCC高(三接口)最终一致最高资金、热点资源
Saga中(正向+补偿)最终一致长流程、跨企业
XA强一致最低低并发强一致

选型决策树

老王的四问选型法:一问:真的跨服务了吗?单体内多数据源,事务管理器或拆库重设更合适,别为 Seata 而 Seata。二问:并发多高?资金热点、单链路上千 QPS 的资源操作,TCC 的预留模式才扛得住;普通业务 AT 足够。三问:流程多长?环节多、周期长、甚至跨企业的,Saga;秒级完结的短链路,AT 或 TCC。四问:能改业务代码吗?不能改又必须强一致,XA 兜底。四问走完,模式自然浮出——互联网业务的大多数场景,答案是 AT 或 TCC

别忽略部署账

Seata 不是零成本的:TC 是一个全公司级的基础设施,要高可用部署(TC 集群 + 状态存 DB/Redis)、要监控、要容量规划——它挂了所有全局事务都挂。老王的教训:TC 上线时按「发号器级别」的基础设施对待,双机房部署、定期演练,第 14 篇(分布式 ID 高可用)的纪律原样适用。

小结

Seata 全景一句话:TC 协调、TM 发起、RM 参与;AT 省事、TCC 省时间(锁)、Saga 管长跑、XA 保强一致;四问定模式,TC 是要按基础设施养活的全公司依赖。AT 模式为什么能「零侵入」还自动回滚?它的 undo_log、全局锁和二阶段异步藏着精巧的设计——下一篇拆开看。

503

10 年全栈工程师 · 503咖啡馆主理人

#分布式事务#Seata#AT模式#TCC模式#Saga模式#选型

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 4 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞