找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1535

积分

0

好友

195

主题
发表于 前天 05:14 | 查看: 14| 回复: 0

本文围绕分布式事务与高可用的核心面试点,系统梳理了TCC、Saga、可靠消息最终一致性以及Seata框架的AT、TCC、Saga、XA四种模式的架构原理。通过清晰的架构图直观展示其工作流程,每个图解均配有核心要点说明,旨在帮助Java面试备考者快速理解与记忆,尤其适合应对中高级岗位的深度考察。

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

TCC模式的核心在于业务层的补偿机制,它将一个完整的业务逻辑拆分为Try、Confirm、Cancel三个阶段,需要开发者手动实现相关接口。这种模式能很好地适配高并发场景,例如秒杀活动。其实现时必须处理三个关键问题:空回滚、防悬挂以及操作的幂等性。

TCC模式业务流程图

工作原理简述
客户端发起业务请求后,事务协调器会按序调用各个参与服务(如订单、库存、支付)的Try方法进行资源预留(例如创建待支付订单、冻结库存、冻结余额)。如果所有Try操作都成功,协调器则调用各服务的Confirm方法进行最终提交(更新订单、扣减库存、扣减余额);若任一Try失败,则调用Cancel方法进行回滚(取消订单、释放库存、解冻余额),释放预留的资源。

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

Saga模式专为长业务流程设计,其核心思想是将一个长事务拆分为一系列连续的本地事务,并为每个正向事务配备一个对应的补偿事务。它支持编排式(无中心,事件驱动)和协调式(有中心协调器)两种实现方式,非常适合像旅行预订这类涉及多步骤、耗时的场景。

Saga模式处理流程图

工作原理简述
事务开始后,系统按顺序执行各个正向本地事务(LT1→LT2→LT3),如创建订单、扣减库存、执行支付,且每个事务执行后立即提交,不持有全局锁。如果所有正向事务成功,则整个事务提交。如果其中任何一个正向事务失败,系统将启动补偿流程,按照与正向执行相反的顺序(CT3→CT2→CT1)调用补偿事务进行回滚,例如支付回滚、恢复库存、取消订单。

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

该模式的核心是利用消息队列的事务消息机制(特别是半消息)来保证跨系统业务的最终一致性。它确保了“只要本地业务成功,消息就一定可靠投递;若业务失败,则消息不会发出”,常用于支付成功后的异步通知等场景。

可靠消息最终一致性流程图

工作原理简述

  1. 生产端:先执行本地业务(如创建订单),同时向本地消息表插入一条“待发送”记录,并向MQ发送一条对消费者不可见的“半消息”。
  2. 如果本地业务执行成功,则提交本地事务,然后通知MQ将半消息改为正式可消费消息;如果业务失败,则回滚本地事务及本地消息记录,MQ也会删除半消息。
  3. 消费端:从MQ消费到消息后,执行自身的业务逻辑(如发送物流通知)。消费成功后,可回调通知生产端更新消息状态。通过MQ的重试机制保证消息至少被消费一次。

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

Seata是一款开源的分布式事务解决方案,其核心设计包含三大组件:事务管理器(TM)、资源管理器(RM)和事务协调器(TC)。它提供了AT、TCC、Saga和XA四种事务模式,以适配不同的业务场景,显著降低了分布式事务的开发复杂度。

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

在这个架构中,TM负责定义全局事务的边界(开启、提交、回滚);RM负责管理分支事务,执行具体的业务SQL,并向TC注册和报告状态;TC是独立部署的服务端,作为大脑协调所有全局和分支事务,并通过全局唯一的XID将它们串联起来。

Seata核心架构图

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

AT模式是Seata的默认模式,主打对业务代码零侵入。其原理是通过代理数据源,在一阶段提交业务SQL时,自动拦截并生成数据的前后镜像(undo_log)。二阶段如果是提交,则异步删除undo_log;如果是回滚,则通过undo_log中的前镜像自动回滚数据。

Seata AT模式流程图

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

Seata的TCC模式复用标准的TCC三阶段逻辑,但由Seata框架来协调整个Try-Confirm-Cancel流程的调用。开发者只需使用@TwoPhaseBusinessAction注解来定义Try、Confirm、Cancel三个方法,无需自己处理事务日志和协调逻辑,简化了开发。

Seata TCC模式协调流程图

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

Seata的Saga模式基于状态机引擎实现。开发者可以通过状态机可视化地编排复杂的长事务流程(包含正向服务和补偿服务)。状态机引擎负责驱动这些服务的异步执行,适合业务流程长、需要高吞吐的场景。

Seata Saga状态机引擎流程图

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

XA模式基于数据库原生支持的XA协议,实现强一致性的两阶段提交(2PC)。在一阶段,各数据库资源执行Prepare,锁定资源但不提交;二阶段由TC统一通知所有资源进行提交或回滚。这种模式一致性最强,但因锁持有时间长,在高并发下性能压力较大。

Seata XA模式流程图

面试核心要点梳理

  1. 记忆要点:面对架构图,重点把握“核心组件的作用”、“数据/请求的流动方向”以及“该模式的突出特点与短板”。结合具体的业务场景(如秒杀用TCC,长链路用Saga)来理解会更深刻。
  2. 高频考点
    • TCC模式的三个阶段划分,以及空回滚、防悬挂、幂等性这三个必须处理的坑。
    • Seata的三大组件(TM, RM, TC)各自职责,以及AT模式如何通过undo_log实现无侵入回滚。
    • Saga与TCC的核心区别:Saga一阶段就提交,靠补偿回滚;TCC一阶段只是预留,二阶段才确认。
    • 可靠消息最终一致性中,“半消息”和“本地消息表”各自解决了什么问题(防丢失、保证原子性)。
  3. 学习建议:将每种模式的架构图与其典型应用场景、优缺点进行关联记忆。在回答面试官问题时,可以先抛出核心思想,再结合流程图简述流程,最后总结适用场景,这样显得逻辑清晰、理解透彻。

希望这份整合了核心架构图与原理说明的指南,能帮助你在备战技术面试时更高效地掌握分布式事务这一难点。更多深入的技术讨论和实践分享,欢迎在云栈社区交流。




上一篇:DDR4与DDR5内存怎么选?游戏、生产力场景与避坑指南
下一篇:基于SKILL编排的Android智能审计Agent:构建从Jadx到FlowDroid的漏斗式分析流水线
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 10:27 , Processed in 0.573102 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表