系统架构设计师 · 高频练习

Saga 和 TCC 分布式事务适合什么场景?

高级 单选题 第 804 题 中等 系统架构设计师SagaTCC分布式事务最终一致性
题目

某旅游平台的下单流程包括预订机票、预订酒店、生成订单和扣减优惠券。各步骤可以拆成多个本地事务,如果后续步骤失败,需要按业务补偿动作撤销前面已经完成的操作。另一个资金冻结场景要求先 Try 预留资源,再 Confirm 提交或 Cancel 取消。关于 Saga 和 TCC 的理解,较合理的是()。

A Saga 更强调一系列本地事务及补偿动作,TCC 更强调 Try、Confirm、Cancel 三阶段资源预留和确认
B Saga 是图片格式,TCC 是网线类型
C 二者都要求所有服务共享同一个本地数据库事务
D 只要用了微服务,就不需要考虑一致性和补偿
题目类型:原创高频练习题 用途:用于帮助理解系统架构设计师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

Saga 通常把长事务拆成多个本地事务,每一步都有对应的补偿动作,适合业务流程较长、可以接受最终一致性的场景。TCC 则把业务操作拆成 Try、Confirm、Cancel 三个阶段,Try 阶段预留资源,Confirm 确认提交,Cancel 取消释放资源,更适合需要明确资源预留和强业务控制的场景。

选项分析

A

正确。Saga 侧重本地事务加补偿,TCC 侧重 Try/Confirm/Cancel 三阶段。

B

错误。Saga 和 TCC 都是分布式一致性相关模式,不是图片或网线类型。

C

错误。微服务场景下通常不能依赖一个跨所有服务的本地数据库事务。

D

错误。微服务拆分后更需要认真设计一致性、幂等和补偿。

本题为什么容易错

这题容易把所有分布式事务方案混成一个词。考试真正想看的是场景判断:业务动作能不能补偿,资源需不需要预留,失败后如何恢复,是否允许最终一致。

先看结论

简短答案

Saga 和 TCC 分布式事务适合什么场景,正确答案是 A(Saga 更强调一系列本地事务及补偿动作,TCC 更强调 Try、Confirm、Cancel 三阶段资源预留和确认)。Saga 通常把长事务拆成多个本地事务,每一步都有对应的补偿动作,适合业务流程较长、可以接受最终一致性的场景。TCC 则把业务操作拆成 Try、Confirm、Cancel 三个阶段,Try 阶段预留资源,Confirm 确认提交,Cancel 取消释放资源,更适合需要明确资源预留和强业务控制的场景。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
Saga 更强调一系列本地事务及补偿动作,TCC 更强调 Try、Confirm、Cancel 三阶段资源预留和确认 本题正确答案 正确。Saga 侧重本地事务加补偿,TCC 侧重 Try/Confirm/Cancel 三阶段。 看到题干核心场景时优先联想到它
Saga 是图片格式,TCC 是网线类型 本题干扰项 错误。Saga 和 TCC 都是分布式一致性相关模式,不是图片或网线类型。 看到该词不要急着选,先判断是否真正解决题干问题
二者都要求所有服务共享同一个本地数据库事务 本题干扰项 错误。微服务场景下通常不能依赖一个跨所有服务的本地数据库事务。 看到该词不要急着选,先判断是否真正解决题干问题
只要用了微服务,就不需要考虑一致性和补偿 本题干扰项 错误。微服务拆分后更需要认真设计一致性、幂等和补偿。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • Saga 是图片格式,TCC 是网线类型:错误。Saga 和 TCC 都是分布式一致性相关模式,不是图片或网线类型。
  • 二者都要求所有服务共享同一个本地数据库事务:错误。微服务场景下通常不能依赖一个跨所有服务的本地数据库事务。
  • 只要用了微服务,就不需要考虑一致性和补偿:错误。微服务拆分后更需要认真设计一致性、幂等和补偿。
复习

知识点详解

Saga 和 TCC 都是微服务架构里常见的一致性设计思路,但它们的业务约束不同。Saga 更适合流程型业务,例如预订、审批、履约,每一步完成一个本地事务,后续失败时执行补偿动作。补偿不是数据库回滚,而是业务上的反向操作,例如取消预订、退回优惠券、关闭订单。TCC 更适合资源预留明确的场景,例如账户资金、库存名额、优惠资格,Try 阶段先冻结或预留,Confirm 阶段正式提交,Cancel 阶段释放。TCC 控制更细,但业务侵入也更强。考试里如果问“失败后按业务补偿撤销已完成步骤”,Saga 是高频答案;如果问“Try、Confirm、Cancel”,答案就非常明显是 TCC。

备考速记

速记:Saga 靠补偿,TCC 先预留;Saga 像流程回退,TCC 像先占座再确认。

Saga 在最终一致性场景中的作用

Saga在本题中的核心价值,是解决“某旅游平台的下单流程包括预订机票、预订酒店、生成订单和扣减优惠券。各步骤可以拆成多个本地事务,如果后续步骤失败,需要按业务补偿动作撤销前面已经完成的操作。另一个资金冻结场景要求先 Try 预留资源,再 Confirm 提交或 Cancel 取消。关于 Saga 和 TCC 的理解,较合理的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出最终一致性场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查Saga的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把Saga和Saga 是图片格式,TCC 是网线类型、二者都要求所有服务共享同一个本地数据库事务、只要用了微服务,就不需要考虑一致性和补偿放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
Saga 在系统架构设计师软考中的考法

软考选择题通常不会只考概念定义,还会把Saga放到最终一致性场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

这题给了两个很典型的信号。机票、酒店、优惠券串起来,失败后按业务动作补偿,这是 Saga 的味道;资金冻结先 Try,再 Confirm 或 Cancel,这是 TCC 的味道。老师讲架构题时会提醒,不要只背“分布式事务很难”,要能根据业务可补偿性选择模式。

考点定位

分布式事务题先看业务动作。长流程、每步可补偿,往 Saga 想;资源需要先冻结或预留,再确认或取消,往 TCC 想。

易错提醒

  • 只设计正向流程,没有设计补偿动作和异常恢复。
  • TCC 的 Try 阶段直接完成不可撤销操作,导致 Cancel 无法实现。
  • 忽略幂等,Confirm 或 Cancel 重复调用时产生二次扣款或二次释放。

备考提示

  • Saga 记“正向步骤 + 反向补偿”,TCC 记“试一下、确认、取消”。
  • 架构案例里谈分布式事务时,要同时写一致性、幂等、超时、重试、补偿和监控。
  • 如果题干出现订单、库存、优惠券、支付等跨服务链路,要先判断它要求强一致还是最终一致。

你可能还想了解

  • Saga 和 TCC 分布式事务适合什么场景?
  • Saga是什么?
  • Saga在系统架构设计师考试中怎么考?
  • 系统架构设计师Saga题怎么理解?
  • Saga和TCC区别怎么考?
  • 系统架构设计师分布式事务怎么考?

本文小结

本题核心考点是Saga在最终一致性场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(Saga 更强调一系列本地事务及补偿动作,TCC 更强调 Try、Confirm、Cancel 三阶段资源预留和确认)。