文章目录
- 前言
- 一、目前生产主流就6种分布式事务方案(其他一律淘汰不用)
-
- [1、Seata AT模式(互联网微服务 **默认首选** )](#1、Seata AT模式(互联网微服务 默认首选 ))
- [2、Seata TCC模式(复杂特殊业务**定制专用**)](#2、Seata TCC模式(复杂特殊业务定制专用))
- 3、本地消息表+MQ+定时任务(小型项目**低成本首选**)
- 4、RocketMQ原生事务消息(高并发异步业务**大厂首选**)
- 5、最大努力通知(第三方支付/对外回调**标配方案**)
- 6、XA/2PC强一致(老旧历史项目**续命专用**)
- 二、生产开发分布式事务**一秒选型决策口诀**(直接照抄)
- 三、面试高频:分布式事务面试官必问5题\+标准满分回答
-
- 面试题1:你们项目用过哪种分布式事务?为什么不用其他方案?
- [面试题2:Seata AT和TCC核心区别是什么?生产怎么选?](#面试题2:Seata AT和TCC核心区别是什么?生产怎么选?)
- 面试题3:分布式事务CAP和BASE理论,生产实际怎么落地权衡?
- 面试题4:最大努力通知和可靠消息事务,适用场景区别是什么?
- 面试题5:生产环境分布式事务最大的坑是什么?怎么规避?
前言
做开发这么多年,说实话:线上生产没人纠结CAP理论细节、没人深究2PC/3PC底层源码八股。
生产环境做分布式事务,核心就看三个现实问题:
-
业务能不能接受短时间数据不一致?(核心资金类不能,普通业务可以)
-
系统并发高不高?能不能容忍锁阻塞降性能?
-
团队开发成本够不够?要不要少写代码少踩坑?
本文不谈学术概念、不堆砌底层原理,只讲目前企业生产环境真正在用的分布式事务方案 ,直白对比优缺点、明确每种方案适配场景,开发直接照着选型即可。文末附带面试高频面试官必问问题+标准满分回答,干活面试两不误。
一、目前生产主流就6种分布式事务方案(其他一律淘汰不用)
很多教程讲一堆冷门方案,实际微服务生产环境,常年稳定在用的只有下面6种,老旧过时、踩坑频发的直接忽略即可。
1、Seata AT模式(互联网微服务 默认首选 )
核心一句话概括
半自动事务,代码零侵入、不用手写补偿逻辑,框架自动生成回滚日志,自动提交、自动回滚,兼顾性能和一致性。
生产适用场景
-
90%常规微服务业务:下单、扣库存、改订单、普通交易流程
-
需要数据一致性,但不用毫秒级强一致,追求高性能、高并发
-
开发团队人手少,不想写大量冗余补偿代码
生产优缺点(实话实说)
✅ 优点:注解即用、开发量极低;一阶段快速释放锁,性能好;阿里维护稳定,社区活跃,坑少解决方案多。
❌ 缺点:依赖数据库支持ACID;极端极端边界场景会有少量隔离性问题,常规业务完全感知不到。
生产选型结论
新项目、常规微服务,闭眼直接用Seata AT,不用思考。
2、Seata TCC模式(复杂特殊业务定制专用)
核心一句话概括
纯代码手动补偿事务,不靠数据库回滚,全靠自己写Try/Confirm/Cancel三段业务逻辑,想怎么回滚就怎么回滚。
生产适用场景
-
非标业务操作:涉及Redis缓存、文件读写、第三方接口调用,数据库管不了的事务
-
资金对账、核心金融类需要精准强一致、回滚逻辑复杂的场景
-
AT模式满足不了特殊定制化回滚需求的业务
生产优缺点(实话实说)
✅ 优点:不依赖数据库事务,适配所有复杂业务,强一致性可控,灵活性拉满。
❌ 缺点:代码侵入极强,开发工作量翻倍;必须自己保证接口幂等、防重复、防空回滚,写不好必出线上事故。
生产选型结论
能用AT就绝不碰TCC,只有AT搞不定的特殊业务,才被迫用TCC。
3、本地消息表+MQ+定时任务(小型项目低成本首选)
核心一句话概括
纯业务代码实现,不靠任何分布式事务框架,靠本地事务表记录消息状态,定时任务重试兜底,最终数据一致。
生产适用场景
-
小型项目、初创项目、内部管理系统,不想引入Seata重型框架
-
业务实时性要求不高,允许几秒、几分钟内数据最终同步即可
-
异步通知、积分发放、日志记录、非核心附属业务
生产优缺点(实话实说)
✅ 优点:零框架依赖、上手简单、成本极低、出问题好排查。
❌ 缺点:需要自己写定时任务、自己维护消息表;纯异步执行,实时一致性差。
生产选型结论
小项目不用Seata,简单业务凑合用,省钱省人手首选。
4、RocketMQ原生事务消息(高并发异步业务大厂首选)
核心一句话概括
MQ自带分布式事务能力,半消息机制+事务回查,无需自己写消息表和重试逻辑,高吞吐高可用。
生产适用场景
-
电商订单、物流通知、营销活动等高并发、大数据量异步业务
-
本身业务就依赖RocketMQ做消息队列,需要事务兜底的场景
-
追求高吞吐、不想要Seata额外组件维护成本的大厂项目
生产优缺点(实话实说)
✅ 优点:MQ原生支持,不用自研重试和消息表;高并发性能极强,稳定性久经大厂验证。
❌ 缺点:必须使用RocketMQ,不能用其他MQ;只适合异步业务,不适合同步强一致场景。
生产选型结论
高并发异步业务,直接上RocketMQ事务消息,比Seata更稳更快。
5、最大努力通知(第三方支付/对外回调标配方案)
核心一句话概括
失败就无限重试,重试不行就提供查询接口,让对方主动拉取状态,保证消息一定通知到对方。
生产适用场景
-
支付回调、退款回调、对接第三方平台、跨公司系统交互
-
微信支付、支付宝支付、第三方接口联动标准业务
生产优缺点(实话实说)
✅ 优点:行业通用标准,简单稳定,几乎不出线上事故,维护成本极低。
❌ 缺点:只适合回调通知场景,不适合内部业务数据强一致事务。
生产选型结论
只要对接外部第三方、做支付回调,没得选,必须用最大努力通知。
6、XA/2PC强一致(老旧历史项目续命专用)
核心一句话概括
数据库原生强一致性事务,同步阻塞等待,所有节点同时提交、同时回滚。
生产适用场景
-
十年以上老旧遗留项目,无法改造升级框架
-
并发极低、内部小系统,几乎没有流量压力
-
必须实时强一致,不在乎性能高低的小众业务
生产优缺点(实话实说)
✅ 优点:强一致性最高,不用开发额外代码。
❌ 缺点:同步阻塞锁资源,性能极差;协调者单点故障风险高,线上极易卡死。
生产选型结论
新项目绝对禁止使用,只用来维护老旧老系统,能换掉尽快换掉。
二、生产开发分布式事务一秒选型决策口诀(直接照抄)
-
普通微服务同步业务、不知道选啥 → 无脑 Seata AT
-
Redis/第三方接口复杂回滚、AT搞不定 → 被迫 Seata TCC
-
小项目不想加框架、异步非核心业务 → 本地消息表+MQ
-
高并发电商异步订单、本身用RocketMQ → RocketMQ事务消息
-
支付回调、对接第三方外部系统 → 最大努力通知
-
老旧项目维护、没预算改造 → 凑合用 XA/2PC
-
终极原则:能业务规避就不用分布式事务,不用就是最稳最快的方案
三、面试高频:分布式事务面试官必问5题+标准满分回答
面试题1:你们项目用过哪种分布式事务?为什么不用其他方案?
满分回答:
我们生产核心微服务统一使用Seata AT模式。
选择原因有三点:第一,AT模式代码零侵入,只需加一个注解,开发成本极低,适合团队快速迭代;第二,一阶段提交后快速释放锁资源,并发性能好,满足线上业务流量要求;第三,阿里社区维护成熟,线上坑少,出问题有成熟解决方案。
没有用TCC是因为TCC代码侵入太强,开发量大,容易因为幂等、空回滚引发线上事故;没有用XA是因为XA同步阻塞性能太差,不适合高并发微服务;异步业务我们搭配RocketMQ事务消息和最大努力通知做补充。
面试题2:Seata AT和TCC核心区别是什么?生产怎么选?
满分回答:
核心区别就两点:一是实现方式不同,AT是框架自动基于undo日志自动回滚,不用手写补偿代码;TCC是业务代码手动写Try、Confirm、Cancel三段逻辑,全靠开发者自己控制回滚。二是依赖不同,AT依赖数据库本地事务,TCC不依赖数据库事务,适配Redis、第三方接口等特殊场景。
生产选型原则很简单:常规数据库业务一律用AT,只有AT无法适配的复杂非标业务,才被迫使用TCC。
面试题3:分布式事务CAP和BASE理论,生产实际怎么落地权衡?
满分回答:
CAP理论在生产不用纠结,分布式系统网络分区P是必选,必须保证。我们只在C强一致性和A可用性之间权衡。
互联网业务基本都遵循BASE理论,放弃实时强一致性,保证系统高可用,通过最终一致性实现数据同步。核心资金业务适当兼顾强一致,牺牲部分性能;普通业务优先高可用,接受短时间数据不一致,后续自动补偿同步。
面试题4:最大努力通知和可靠消息事务,适用场景区别是什么?
满分回答:
最大努力通知主要用于对外第三方回调场景,比如支付回调,核心是重试通知+被动查询,保证外部系统一定能收到通知。
可靠消息事务主要用于内部微服务异步业务,通过消息表或MQ事务机制,保证内部服务之间消息投递和业务执行一致性,不对外对接第三方。
面试题5:生产环境分布式事务最大的坑是什么?怎么规避?
满分回答:
最大的坑不是原理不懂,而是两个实战问题:一是过度使用分布式事务,简单业务不做业务拆分规避,强行上事务框架,增加系统复杂度和故障率;二是补偿接口不做幂等、不防空回滚,重试之后数据错乱。
规避方式:第一,优先业务设计规避分布式事务,能不用就不用;第二,用Seata AT减少手动代码开发;第三,所有补偿、回调、重试接口必须强制做幂等性设计;第四,核心事务做好日志记录和告警,出问题快速定位回滚。