小红书Java岗面试真题-分布式事务核心技术架构

本文基于「分布式事务与高可用」面试核心内容,整理TCC、Saga、可靠消息最终一致性、Seata(AT/TCC/Saga/XA)四大模式的核心架构图,用mermaid清晰呈现工作原理,适配小红书Java面试备考,每个架构图搭配关键说明,贴合原文知识点,便于理解和记忆。

一、TCC(Try-Confirm-Cancel)模式架构图及工作原理

核心:业务层补偿机制,拆分为3个阶段,手动实现接口,需处理空回滚、防悬挂、幂等性,适配高并发场景(如秒杀)。

客户端发起业务请求

事务协调器

Try阶段:资源预留/冻结

订单服务:创建待支付订单

库存服务:冻结商品库存

支付服务:冻结账户余额

所有Try都成功?

Confirm阶段:确认提交

订单服务:更新订单为已支付

库存服务:扣减冻结库存

支付服务:扣减冻结余额

事务完成

Cancel阶段:回滚释放

订单服务:取消订单

库存服务:释放冻结库存

支付服务:解冻账户余额

注:Try/Confirm/Cancel需手动实现,Confirm/Cancel需保证幂等性,Cancel需处理空回滚、防悬挂

二、Saga模式架构图及工作原理

核心:长事务拆分,拆分为多个本地事务+对应补偿事务,支持编排式/协调式,适配长流程场景(如旅行预订)。

两种协调方式

客户端发起长事务请求

协调器/事件总线

正向本地事务链:LT1→LT2→LT3

LT1:创建订单(本地事务提交)

LT2:扣减库存(本地事务提交)

LT3:执行支付(本地事务提交)

所有正向事务成功?

事务提交,流程结束

补偿事务链:CT3→CT2→CT1(逆序执行)

CT3:支付回滚(解冻余额)

CT2:库存回滚(恢复库存)

CT1:订单回滚(取消订单)

编排式:无中心,服务间通过事件驱动

协调式:有中心协调器,统一调度所有服务

注:每个本地事务执行后立即提交,无全局锁;补偿事务是正向事务的反向操作,不保证隔离性

三、可靠消息最终一致性架构图及工作原理

核心:本地事务+消息队列事务机制(核心是半消息机制),半消息确保消息可靠性(不丢失)和可见性(消费端暂不可见,避免业务失败后消息被误消费),最终保证“业务成功则消息必发且可见,业务失败则消息不发或删除”,适配异步通知场景。

关键组件

生产端

本地事务+消息表原子操作

执行核心业务(如订单创建)

业务执行成功?

事务回滚,不发送消息/删除半消息

向本地消息表插入“待发送”消息,同时向MQ发送半消息

半消息:MQ接收后标记为“暂不可见”,消费端无法消费,仅等待生产端确认

本地事务提交

重新扫描+回查,重试确认

生产端向MQ发送确认指令,半消息标记为“可消费”

MQ事务校验/回查(确保半消息确认指令不丢失)

消息确认成功?

消费端

接收可消费消息,执行业务(如物流通知)

消费成功?

回调生产端,更新消息状态为“已消费”

MQ重试机制,重新投递消息

消息队列:存储半消息、处理确认指令,保证可靠性

生产端数据库:存储业务数据+本地消息表,保证原子性

四、Seata框架核心架构及四大模式工作原理

核心:Seata三大组件(TM/RM/TC)协同,支持AT/TCC/Saga/XA四种模式,适配不同业务场景,降低分布式事务开发成本。

4.1 Seata核心架构(三大组件:TM/RM/TC)

核心:TM发起/提交/回滚全局事务;RM管理分支事务、上报状态;TC独立部署,协调全局事务,XID贯穿全流程绑定分支与全局事务。

📦 微服务应用端

🖥️ Seata Server 集群

RM 资源管理器

1. 申请开启全局事务
获取 XID
2. 携带 XID 调用服务
3. 注册分支事务
绑定 XID
4. XID 透传
5. 注册分支事务
6. 下发提交/回滚指令
7. 下发提交/回滚指令

TC 事务协调器
1. 生成 XID
2. 管理全局事务状态
3. 下发提交/回滚指令

TM 事务管理器
1. 向 TC 发起全局事务
2. 获取 XID 并传播
3. 通知 TC 提交/回滚

订单服务
1. 执行本地分支事务
2. 注册分支至 TC
3. 执行 TC 指令

库存服务

支付服务

💡 注:XID 是全局事务唯一标识
必须贯穿所有分支事务
TC 建议 3 节点集群部署,避免单点故障

4.2 Seata-AT模式架构图(无侵入,默认模式)

核心:一阶段提交本地事务+记录undo_log,二阶段自动补偿(回滚时用undo_log还原数据),无业务侵入。

提交

回滚

无脏写

有脏写

TM开启全局事务(向TC注册)

RM拦截业务SQL

一阶段(Prepare)

记录before image(数据修改前镜像)

执行业务SQL,更新数据

记录after image(数据修改后镜像)

提交本地事务,向TC汇报成功

TM通知TC,全局事务结束

全局事务提交/回滚?

二阶段提交:RM删除undo_log,清理资源

二阶段回滚:RM校验脏写(对比当前数据与after image)

用before image还原数据,删除undo_log

人工干预处理

事务完成

注:AT模式基于数据源代理,自动记录undo_log,对业务代码零侵入,通过全局锁保证隔离性

4.3 Seata-TCC模式架构图(高性能,手动实现)

核心:复用TCC三阶段逻辑,由Seata协调Try/Confirm/Cancel执行,无需手动编排,简化开发。

备注

Try/Confirm/Cancel需手动实现,Seata通过@TwoPhaseBusinessAction注解关联方法,自动处理协调逻辑

TM开启全局事务

Seata协调器调用各RM的Try方法

RM1(订单):Try创建待支付订单

RM2(库存):Try冻结库存

RM3(支付):Try冻结余额

所有Try成功?

Seata协调器调用各RM的Confirm方法

RM1:Confirm更新订单状态

RM2:Confirm扣减库存

RM3:Confirm扣减余额

Seata协调器调用各RM的Cancel方法

RM1:Cancel取消订单

RM2:Cancel释放库存

RM3:Cancel解冻余额

事务完成

4.4 Seata-Saga模式架构图(长事务,状态机驱动)

核心:基于状态机编排正向/补偿事务,异步执行,适配长事务场景,由Seata状态机引擎驱动流程。

关键特性

TM开启全局事务

Seata状态机引擎(协调器)

状态机解析流程(正向事务链)

RM1:正向事务LT1(创建订单)

RM2:正向事务LT2(扣减库存)

RM3:正向事务LT3(支付)

正向事务全部成功?

状态机标记事务成功,流程结束

状态机驱动补偿事务链(逆序)

RM3:补偿事务CT3(支付回滚)

RM2:补偿事务CT2(库存回滚)

RM1:补偿事务CT1(订单回滚)

支持状态机可视化配置,流程可编排

正向/补偿事务异步执行,高吞吐

无需全局锁,一阶段提交本地事务

4.5 Seata-XA模式架构图(强一致性,数据库原生支持)

核心:基于数据库XA协议,两阶段提交,强一致性,依赖数据库驱动支持,性能较低。

TM开启全局事务

TC协调器发起XA一阶段

各RM(数据库)执行XA Prepare

RM1:执行SQL,不提交,持有锁

RM2:执行SQL,不提交,持有锁

所有RM Prepare成功?

TC发起XA二阶段提交

各RM提交本地事务,释放锁

TC发起XA二阶段回滚

各RM回滚本地事务,释放锁

事务完成

注:XA模式强一致性,依赖数据库支持(如MySQL、Oracle),高并发下锁竞争激烈,性能较差

面试核心备注

  1. 所有架构图均贴合、适配小红书Java面试场景,重点记忆“组件作用+流程走向+核心特点”;

  2. 高频考点:TCC的3个阶段+注意事项、Seata三大组件+AT模式原理、Saga与TCC的区别、可靠消息的实现方式;

  3. 绘图逻辑:每个架构图都对应工作原理+适用场景,可结合面试题同步记忆,强化理解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐