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

为什么服务异常时不能让所有请求立即无限重试?

高级 单选题 第 705 题 中等 系统架构设计师重试风暴指数退避随机抖动微服务稳定性
题目

某微服务调用下游库存服务时出现短暂超时。开发人员准备让所有失败请求立即无限重试,架构师认为这样可能在下游刚刚变慢时进一步放大压力,形成重试风暴。较合理的改进措施是()。

A 设置重试次数上限,并配合指数退避、随机抖动、超时、熔断和降级策略
B 删除所有日志,避免看到错误
C 让客户端每 1 毫秒无限重试,直到下游恢复
D 把所有失败请求都同步写入同一张数据库大表,不做限速
题目类型:原创高频练习题 用途:用于帮助理解系统架构设计师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

重试可以提高短暂故障下的成功率,但无限、立即、同步重试会把原本已经变慢的下游打得更慢,甚至引发级联故障。合理做法是限制重试次数,采用指数退避和随机抖动分散重试压力,并结合超时、熔断、降级、限流和监控告警。

选项分析

A

正确。它同时控制重试次数、重试节奏和故障扩散,是更完整的稳定性设计。

B

错误。删除日志不能解决故障,还会让定位问题更困难。

C

错误。立即无限重试很容易造成重试风暴和级联故障。

D

错误。失败请求集中同步写入且不限速,可能进一步拖垮数据库。

本题为什么容易错

很多同学把“失败了就重试”当成标准答案。重试本身没有错,但必须有边界。没有次数上限、没有退避、没有抖动、没有超时和熔断的重试,可能比不重试更危险。

先看结论

简短答案

为什么服务异常时不能让所有请求立即无限重试,正确答案是 A(设置重试次数上限,并配合指数退避、随机抖动、超时、熔断和降级策略)。重试可以提高短暂故障下的成功率,但无限、立即、同步重试会把原本已经变慢的下游打得更慢,甚至引发级联故障。合理做法是限制重试次数,采用指数退避和随机抖动分散重试压力,并结合超时、熔断、降级、限流和监控告警。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
设置重试次数上限,并配合指数退避、随机抖动、超时、熔断和降级策略 本题正确答案 正确。它同时控制重试次数、重试节奏和故障扩散,是更完整的稳定性设计。 看到题干核心场景时优先联想到它
删除所有日志,避免看到错误 本题干扰项 错误。删除日志不能解决故障,还会让定位问题更困难。 看到该词不要急着选,先判断是否真正解决题干问题
让客户端每 1 毫秒无限重试,直到下游恢复 本题干扰项 错误。立即无限重试很容易造成重试风暴和级联故障。 看到该词不要急着选,先判断是否真正解决题干问题
把所有失败请求都同步写入同一张数据库大表,不做限速 本题干扰项 错误。失败请求集中同步写入且不限速,可能进一步拖垮数据库。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 删除所有日志,避免看到错误:错误。删除日志不能解决故障,还会让定位问题更困难。
  • 让客户端每 1 毫秒无限重试,直到下游恢复:错误。立即无限重试很容易造成重试风暴和级联故障。
  • 把所有失败请求都同步写入同一张数据库大表,不做限速:错误。失败请求集中同步写入且不限速,可能进一步拖垮数据库。
复习

知识点详解

重试风暴常见于分布式系统:下游服务变慢后,上游大量请求失败并同步重试,导致下游压力继续增加,最终把局部故障放大成系统性故障。指数退避通过逐步拉长重试间隔降低压力,随机抖动避免大量请求在同一时刻重试。它们通常还要和幂等设计、超时控制、熔断降级、限流和监控配合,才能形成稳定性闭环。考题如果写“所有客户端同时重试”“失败后立即无限重试”“下游服务已经超时”,就要警惕这不是在考积极性,而是在考你会不会避免把故障扩大。真实系统里,重试策略还要区分读请求和写请求,写请求尤其要先确认幂等性。

备考速记

速记:重试要有刹车。次数有限、间隔退避、时间打散、故障熔断。

微服务稳定性在微服务稳定性场景中的作用

微服务稳定性在本题中的核心价值,是解决“某微服务调用下游库存服务时出现短暂超时。开发人员准备让所有失败请求立即无限重试,架构师认为这样可能在下游刚刚变慢时进一步放大压力,形成重试风暴。较合理的改进措施是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出微服务稳定性场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查微服务稳定性的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把微服务稳定性和删除所有日志,避免看到错误、让客户端每 1 毫秒无限重试,直到下游恢复、把所有失败请求都同步写入同一张数据库大表,不做限速放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
微服务稳定性在系统架构设计师软考中的考法

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

解题思路

这题看起来问重试,其实问的是系统保护。老师讲微服务时会提醒:下游已经喘不过气了,上游如果立刻一起重试,相当于再补几拳。指数退避让重试间隔逐步拉长,随机抖动避免请求同一时刻再次拥上去;熔断和降级则保护核心链路。

考点定位

架构稳定性题不要把重试当万能药。重试看幂等、次数上限、退避策略、超时和熔断,核心是避免把故障放大。

易错提醒

  • 对非幂等接口盲目重试,造成重复扣款、重复扣库存或重复创建订单。
  • 所有客户端固定间隔同时重试,形成同步冲击。
  • 只加重试,不加超时、熔断、限流、监控和降级。

备考提示

  • 系统架构设计师复习稳定性时,把超时、重试、熔断、限流、降级、隔离放在一组比较。
  • 看到瞬时故障可以重试,但看到下游持续变慢,要警惕重试风暴。
  • 架构题里的好答案通常不是一个技术点,而是一组有边界的保护措施。

你可能还想了解

  • 为什么服务异常时不能让所有请求立即无限重试?
  • 微服务稳定性是什么?
  • 微服务稳定性在系统架构设计师考试中怎么考?
  • 系统架构设计师微服务稳定性题怎么理解?
  • 重试风暴怎么避免怎么考?
  • 指数退避和随机抖动怎么考?

本文小结

本题核心考点是微服务稳定性在微服务稳定性场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(设置重试次数上限,并配合指数退避、随机抖动、超时、熔断和降级策略)。