想象一家大型商场迎来了周年庆大促。凌晨五点,门口已经排起长队;九点开门的一瞬间,人流像潮水一样涌进来。如果让所有人都自由穿梭于每一层、试每一件衣服、排每一个收银台,结果会怎样?空气越来越浑浊,走廊越来越挤,甚至有人被推搡受伤——整个商场不用两个小时就会陷入瘫痪。聪明的商场经理不会等到瘫痪才行动,他们早就准备好了应急预案:关闭客流稀少的美食区,暂停试衣间服务,只保留主收银台和应急通道,在各楼层安排引导员。这些动作看似“赶客”,实则是牺牲一部分次要体验,换来了核心交易——收银——的顺畅,也换来了全场的安全。这套思维方式,就是软件系统里常说的“服务降级”。而商场里的应急预案手册、备用收银机、预印的导购地图,就是“兜底数据”;闸机口的人流计数器和红外警报,就是“自动降级触发”。本文就用这座商场的求生故事,带你理解服务降级与兜底策略的全部秘密。

岗位关联

懂降级与兜底,是区分高级架构师和普通开发者的分水岭。掌握了它,你就能在大促洪峰、依赖故障中稳稳保住核心业务,让系统真正配得上“高可用”这三个字。

目录
  1. 可视化演示
  2. 降级思想与目标
  3. 降级策略分类
  4. 兜底数据设计
  5. 自动降级触发
  6. 降级恢复治理
  7. 流量治理协同
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示熔断器状态机运作原理、四种降级策略分类对比、兜底链路与限流机制,交互调节错误率阈值查看熔断器状态切换与系统保护效果。

本节配有交互动效(进入视口后自动加载,约 3KB)。

熔断器状态机原理 Closed(关闭): 正常放行请求,监控错误率 Open(打开): 错误率超阈值,直接返回兜底 if(error_rate > threshold) state = Open Half-Open(半开): 探测恢复,少量请求试探依赖服务是否恢复

降级思想与目标

大促当天早上九点,商场大门一开,人流瞬间灌满中庭。经理站在监控室,做了三件事:把通往三楼美食广场的扶梯关停,让广播循环播放“二层试衣间暂停使用”,并把所有保安调往主收银区。他关掉的东西很多,但保住的东西只有一样——收银台前的队伍还能正常向前移动。这就是降级思想的全部起点:在资源不够用的时候,敢于做减法,而且知道减在哪里。

在分布式系统里,资源不够用是常态:流量洪峰、依赖抖动、机房故障随时可能发生。如果所有功能都抢资源,最终结果就是“谁都用不好”,连最核心的下单和支付也一起卡死。服务降级(Service Degradation)正是在这种场景下,主动降低部分功能的可用性,把资源让渡给核心链路——就像商场关掉美食区,把扶梯运力让给收银客流。衡量降级价值,可以用可用性公式:系统正常服务时间占比越高,说明降级体系越有效。

商场的可用性,不是“从没关过门”,而是“在最难的一天,核心收银区依然运转”。系统也一样——真正的可用性,是在降级的护航下,核心交易一天都没有断过。

A=TupTup+TdownA = \frac{T_{up}}{T_{up} + T_{down}}
可用性 \( A \) = 正常运行时间 ÷ 总时间。“四个九”意味着全年故障不足 53 分钟,而合理降级正是达成这个目标的关键手段。
  1. 分子 \( T_{up} \)正常运行时间。系统连续正常响应外部请求的总时长,单位是秒或分钟。
    TupT_{up}
  2. 分母 \( T_{up} + T_{down} \)总考察时间,等于正常运行时间与故障中断时间之和。
    Tup+TdownT_{up} + T_{down}
  3. 比值 \( A \)正常时间占总时间的比例,越接近 1 代表系统越可靠。
    A=TupTup+TdownA = \frac{T_{up}}{T_{up} + T_{down}}

降级策略分类

同一个大促日,降级动作也分很多种。美食广场整层关闭,是“业务降级”——干脆不卖吃的;扫码秒付、免试穿直接拿号,是“技术降级”——用更轻的方式完成原本重的流程;排队超过十分钟自动发补偿券,是“超时降级”——等不起就快速结束;而店长在广播里宣布“今日暂停积分兑换”,是“人工降级”——人拍板应对计划外的情况。这四卷动作,是商场应急预案里的四个抽屉。

对应到系统,四类降级策略各有适用场景。业务降级:直接关闭非核心业务功能,如暂停积分商城、暂停评论,损失明确且恢复最快。技术降级:保留功能但简化技术路径,如把实时推荐换成基于规则的打分,把精确查询换成聚合预计算,显著减少资源消耗。超时降级:给远程调用设置超时时限,超过时限立即返回失败或降级结果,不继续占用线程等待。人工降级:通过开关平台手动触发,适合预案未覆盖或需要业务判断的场景。当多种降级动作组合在一起时,需要评估总代价——每个被牺牲的功能都有它的“身价”和“受伤程度”。

商场的四卷动作,对应系统的四类降级策略。学会按场景挑选正确的抽屉,才不会在大促当天手忙脚乱。

L=∑i=1nwi×liL = \sum_{i=1}^{n} w_i \times l_i
降级总代价 \( L \) = 每个被降级功能的业务权重 \( w_i \) × 损失率 \( l_i \) 的累加。架构师要选总代价最小、又能保住核心链路的组合。
  1. 权重 \( w_i \)第 \( i \) 个被降级功能的业务权重。核心下单功能权重高,辅助浏览功能权重低。
    wiw_i
  2. 损失率 \( l_i \)降级后该功能体验受损的程度,取值在 0 到 1 之间。
    lil_i
  3. 累加求和把所有被降级功能的权重与损失率乘积相加,得到本次降级的总代价。
    ∑i=1nwi×li\sum_{i=1}^{n} w_i \times l_i

兜底数据设计

商场应急预案手册里最值钱的东西,不是“停哪些区域”的清单,而是“停掉以后怎么办”的物料:预印的导购地图、备用的手写收据、应急广播稿。顾客没买到美食,至少拿着一张地图找到最近的便利店;收银机卡死,收银员抽出备用登记本照样记账。这些预先准备的“替代答案”,就是兜底数据。

服务降级之后,用户请求依然会到达。如果系统此时返回空指针、抛出异常,前端会看到白屏或报错,损失比降级本身还大。所以降级必须配套兜底数据——在功能不可用时,用提前准备的静态数据或近似数据应答请求。兜底数据有四个层次:默认值兜底,由配置中心(相当于商场的中央广播系统)预置全局默认配置,如默认文案、默认运营位;静态数据兜底,由运营和产品预置的热门榜单、常见问题,数据定期离线更新;缓存兜底,多级缓存(本地内存 + Redis)中的残存数据,即使源头挂了也能返回近期快照;本地内存兜底,进程内预加载的不可变数据,重启也能用,响应速度最快。四层按优先级排列,组成降级期间的最后一道数据防线。

导览图印得越精细,应急预案就越从容;同样,兜底数据预置得越用心,降级带给用户的体感就越接近“服务如常”。

Hhit=NhitNtotalH_{hit} = \frac{N_{hit}}{N_{total}}
兜底命中率 \( H_{hit} \) = 降级期间从兜底层成功返回结果的请求数 ÷ 总请求数。命中率越高,说明兜底覆盖越全,用户的体感损失越小。
  1. 分子 \( N_{hit} \)降级期间命中兜底层(静态缓存、预置数据)并直接返回结果的请求数量。
    NhitN_{hit}
  2. 分母 \( N_{total} \)降级期间到达系统的全部请求数量,包括命中和未命中的。
    NtotalN_{total}
  3. 命中率 \( H_{hit} \)两者相除,衡量兜底数据对请求的覆盖程度,是降级效果的核心监控指标。
    Hhit=NhitNtotalH_{hit} = \frac{N_{hit}}{N_{total}}

自动降级触发

商场大促那天,保安不能只靠眼睛盯。闸机口装了红外人流计数器,屏幕上的数字一旦超过每小时 3000 人,系统自动关闭二层入口,同时向所有保安的对讲机推送指令。整个过程不需要经理点头,数字就是命令。人工决策在大促这种毫秒级变化的场景里太慢了,必须把判断交给机器。

系统也一样。自动降级触发机制,让系统在毫秒级自己做出“该降级了”的决定。它由四个部件协同工作:阈值触发,基于 QPS、平均响应时间 RT、错误率等指标与预设阈值比较,一超即触发,这是最常见的触发方式;熔断联动,熔断器打开(依赖服务连续失败)时,联动触发调用方的降级,防止级联失败拖垮整条链路,就像故障电梯自动拉闸;健康检查,对依赖服务做主动探测,不健康实例被摘除,相关调用自动降级;动态开关,通过配置中心下发开关,支持人工和自动化修改,还能灰度下发避免一刀切。四个部件共同构成了自动降级的判定逻辑:

红外计数器不会累,也比人的直觉更可靠。自动降级触发,就是把“防患于未然”从口号变成精确的数字。

Trigger={1,QPS>C∨RT>Tmax0,otherwise\text{Trigger} =\begin{cases}1, & QPS > C \lor RT > T_{max}\\0, & \text{otherwise}\end{cases}
触发判定:当每秒请求数 \( QPS \) 超过系统容量 \( C \),或者平均响应时间 \( RT \) 超过最大可接受延迟 \( T_{max} \) 时,触发值置为 1,进入降级状态。
  1. 条件 \( QPS > C \)每秒请求数超过系统容量上限,说明入口流量已经饱和,就像商场人流冲破每小时 3000 人的警戒线。
    QPS>CQPS > C
  2. 条件 \( RT > T_{max} \)平均响应时间超过可接受的最大延迟,说明资源调度已经紧张,就像收银台前的队伍越排越长。
    RT>TmaxRT > T_{max}
  3. 或运算 \( \lor \)两个条件任一成立即触发,是“并联”关系,保证任何一项风险都不会被遗漏。
    QPS>C∨RT>TmaxQPS > C \lor RT > T_{max}
  4. 结果判定触发置 1 进入降级态,否则维持 0 正常态。
    Trigger=1\text{Trigger} = 1

降级恢复治理

晚上八点,人流开始回落。商场没有“啪”地一下打开所有楼层,而是先开放三层试点,观察客流和收银状态,确认稳定后再逐层放开。经验丰富的保安会告诉你:恢复比降级更容易翻车——刚松一口气,人流又涌回来,就会造成二次踩踏。系统里也有同样的风险。

如果负载一低于触发阈值就立刻恢复,流量稍微反弹就会在降级与恢复之间来回抖动(业内称为“抖动震荡”),资源被反复拆装,比保持降级更危险。因此恢复治理有四个要点:分级预案,像商场用黄橙红三级预警一样,定义不同压力等级下的降级动作和恢复条件,级别越高降级越深;恢复策略,恢复阈值要低于触发阈值并乘以安全系数,留出缓冲余量,避免临界区反复横跳;演练验证,定期做降级演练(相当于商场的消防演习),验证降级动作和兜底数据都真实有效;监控评估,降级期间持续观测核心可用率、兜底命中率、降级时长,用数字判断这次降级值不值。恢复的数学条件很简单,但执行时必须有耐心:

分批开门、留足余量、复盘记录——商场和系统在“怎么收场”这件事上,用的是同一套方法论。

QPSnow<C×sQPS_{now} < C \times s
恢复条件:当前负载 \( QPS_{now} \) 必须低于系统容量 \( C \) 乘以安全系数 \( s \)(通常取 0.6~0.8),才能摘除降级。等号都不行,必须留足缓冲。
  1. 当前负载 \( QPS_{now} \)降级期间实际到达系统的请求速率,是判断能否恢复的唯一依据。
    QPSnowQPS_{now}
  2. 安全系数 \( s \)为突发流量预留的缓冲比例,取 0.6~0.8。系数越小,恢复越保守。
    ss
  3. 乘法与比较当前负载必须严格小于“容量 × 安全系数”,才能触发恢复,防止临界波动。
    QPSnow<C×sQPS_{now} < C \times s

流量治理协同

大促那晚,商场的安防体系其实是三套动作同时运转:门口保安拦住一波人、控制入场速度,这是“限流”;一部电梯故障,电工直接拉闸让它停止运行,这是“熔断”;楼层主管主动关闭美食区,这是“降级”。三套动作各管一摊,配合出一个安全的大促夜。在分布式系统中,这三个词经常被混为一谈,但它们的职责完全不同。

限流(Rate Limiting)控制入口流量,像大门保安:超过每秒 X 个请求直接拒绝,保护系统不被打爆。熔断(Circuit Breaker)保护下游依赖,像故障电梯拉闸:依赖失败率超过阈值就快速失败,避免调用方无限等待拖垮自己。降级(Degradation)管理业务优先级,像楼层主管关区:主动牺牲次要功能,保障核心功能。三者的处理次序通常是:先限流止血,挡住外部洪峰;再熔断切断不良依赖,防止故障蔓延;最后降级释放资源,保核心链路。三者层层递进,构成完整的流量治理体系。而降级释放出的容量,是核心链路最重要的弹药储备:

保安、电工、楼层主管互不越权,却共同织出一张安全网。限流、熔断、降级协同治理,才是高可用架构的完整姿态。

ΔCfree=∑k=1mΔCk\Delta C_{free} = \sum_{k=1}^{m} \Delta C_k
降级释放的容量 \( \Delta C_{free} \) = 每个被降级功能释放的容量 \( \Delta C_k \) 之和。这些容量会被重新分配给核心链路,增强系统抗洪峰的能力。
  1. 单个释放量 \( \Delta C_k \)第 \( k \) 个功能被降级后腾出的资源量,包括线程、连接、带宽和计算能力。
    ΔCk\Delta C_k
  2. 累加求和把 \( m \) 个被降级功能的释放量全部相加,得到本次降级腾出的总资源量。
    ∑k=1mΔCk\sum_{k=1}^{m} \Delta C_k
  3. 资源再分配释放出的容量被核心链路吸收,相当于把美食区的扶梯运力全部调往主收银区。
    ΔCfree\Delta C_{free}

AI 应用场景

电商大促秒杀

阶段:高可用架构设计

解决的问题:双 11/618 洪峰流量下,商品搜索、评价等非核心请求会挤占交易、库存、支付等核心链路的资源,导致下单失败。传统做法靠人工盯着监控大屏临时决定,反应太慢。结合流量预测与自动降级,系统能在峰值到来前预置降级开关,峰值时自动关闭非核心服务。

具体案例:某电商平台大促时,秒级 QPS 冲到日常的 20 倍。系统预测流量后自动开启“营销域降级”:暂停积分商城、砍价活动等接口,推荐流切换为运营预置的热门榜单,核心下单链路 RT 稳定在 200ms 以内。

支付网关依赖故障兜底

阶段:故障容错

解决的问题:支付服务依赖银行通道,银行通道抖动时若持续等待,会拖垮整个支付服务。传统做法是粗暴重试,反而加剧故障。降级策略:超过超时阈值快速失败,返回“支付处理中”状态码,用户侧以轮询兜底,交易状态用缓存快照展示。

具体案例:某支付平台银行渠道超时率升高,熔断器打开后自动降级为“本地记账 + 异步对账”模式:用户看到支付受理成功,实际扣款由异步任务在通道恢复后完成,兜底数据是本地缓存的订单快照,避免了用户重复支付。

内容社区热点降级

阶段:内容分发

解决的问题:突发热点导致评论区服务过载,若不做处理,评论写入失败会连带阅读主链路超时。降级评论服务为“先发后审”模式,用本地内存队列兜底,同时将全站热搜榜改为静态榜兜底。

具体案例:某内容平台突发热点事件,评论量瞬时暴涨 10 倍。系统自动降级评论写入为本地队列,“我的评论”页返回本地缓存的最新 20 条,热门榜改为运营预置的静态榜单,保障了阅读主链路不受影响。

Python 演示

python59 行
import randomimport time  class EmergencyPlan:    """模拟高并发场景下的自动降级与兜底策略"""     def __init__(self, capacity=100, threshold=0.75, safety=0.6):        self.capacity = capacity          # 系统最大容量(QPS)        self.threshold = threshold        # 降级触发阈值比例        self.safety = safety              # 恢复安全系数        self.degraded = False             # 当前是否处于降级状态     def qps_now(self):        """模拟当前流量, 平时平稳, 偶尔出现洪峰"""        if random.random() < 0.25:            return int(self.capacity * (1.2 + random.random() * 0.6))        return int(self.capacity * (0.45 + random.random() * 0.4))     def should_degrade(self, qps):        return qps > self.capacity * self.threshold     def should_recover(self, qps):        return qps < self.capacity * self.safety     def serve(self):        qps = self.qps_now()        if self.degraded:            if self.should_recover(qps):                self.degraded = False                action = "RECOVER"            else:                action = "DEGRADE"        else:            if self.should_degrade(qps):                self.degraded = True                action = "TRIGGER"            else:                action = "NORMAL"        if self.degraded:            results = "[兜底] order->缓存快照, rec->热门榜, chat->欢迎语"        else:            results = "[真实] order->实时扣库存, rec->个性化推荐, chat->人工客服"        return qps, action, results  if __name__ == "__main__":    plan = EmergencyPlan()    print("=== 服务降级与兜底模拟: 20 个时间片 ===")    for tick in range(20):        qps, action, results = plan.serve()        if action in ("TRIGGER", "DEGRADE"):            flag = "!!"        elif action == "RECOVER":            flag = "^^"        else:            flag = "  "        print("%s t=%2d QPS=%3d 状态=%-8s %s" % (flag, tick, qps, action, results))        time.sleep(0.15)
目的:模拟一个高并发系统的自动降级生命周期——流量冲破阈值时自动触发降级,非核心请求返回兜底数据;流量回落到安全线以下才恢复,并打印每个时间片的系统状态。
  1. self.threshold = threshold设定降级触发阈值比例,0.75 表示系统容量用到 75% 就必须降级,相当于商场定下“每小时 3000 人”的警戒线。
  2. if qps > self.capacity * self.threshold:流量超过“容量 × 阈值”即触发降级,这是自动降级最核心的判定行。
  3. if qps < self.capacity * self.safety:恢复条件比触发条件更严苛,负载必须低于“容量 × 0.6”才能恢复,避免在临界区来回抖动。
  4. if self.degraded:先判断当前是否已降级,再决定看触发条件还是恢复条件,模拟真实系统的状态机转换。
  5. results = "[兜底] order->缓存快照, rec->热门榜, chat->欢迎语"降级期间非核心请求统一走预置兜底数据,而不是返回空值或异常。

常见误区

误区我之前以为降级就是系统出故障了,直接把一些功能下线,能保住多少算多少,反正等流量过去再打开就行了,没什么需要提前准备的。

正解降级不是故障时的仓促下线,而是高可用预案的一部分。哪些功能可以牺牲、牺牲到什么程度、兜底数据放哪里、触发阈值是多少,都要在平时定义清楚。商场大促之前,预案手册和备用物资早就备好了,不会等踩踏发生才想对策。真正的降级是从容的、可控的、提前设计好的。

为何常见:很多人接触到的降级都是线上事故后的紧急操作,容易把它理解成被动补救,忽略了它其实是主动设计。

误区降级和熔断我分不清,感觉就是一回事,都是系统不行了,停掉一些东西,反正用户看到的都是功能不可用。

正解熔断是系统检测到依赖服务持续失败后,自动切断对该依赖的调用,像电梯超载就拒绝启动,重在“止损”;降级是主动降低服务范围,像商场主动关闭试衣间,重在“保重点”。熔断经常触发降级,但两者是独立的概念:熔断是保护依赖的开关,降级是管理业务优先级的策略。

为何常见:两者在真实故障中常常同时发生,而且都会让用户看到功能不可用,表面现象高度相似,容易混淆。

误区兜底数据随便给个默认值就行了,比如列表返回空数组,用户字段返回 null,反正是降级时期,没人计较。

正解返回空数组和 null 会让前端渲染出错,用户看到空白页面,损失比降级本身还大。好的兜底是提前准备的有业务含义的数据:推荐位返回运营配置的热门榜单,商品详情返回缓存的最新快照,就像商场发的是预印导览图而不是白纸。兜底数据的质量直接决定降级期间的用户体验。

为何常见:从代码实现角度看,返回空值最省事,容易让人误以为这是可接受的兜底,忽视了业务含义。

误区降级方案粒度越细越好,最好每个接口都能独立降级,这样损失最小、最灵活。

正解粒度过细会导致降级开关数量爆炸,运维根本管不过来,级联状态也很难预测。业界通常按业务域粗粒度降级,比如“交易域”“营销域”“内容域”,一个开关管一组服务。商场也不可能给每个货架单独设一套应急预案,而是按楼层和区域统一管理。过度精细化会引入比故障本身更大的复杂度。

为何常见:初学架构时常以为精细化就等于优秀,忽略了降级治理本身的可运维性约束。

面试题

Q1. 服务降级最核心的目标是什么?

单选题 · easy

  • A.提升系统整体性能
  • B.保障核心链路可用← 正确答案
  • C.显著降低硬件成本
  • D.彻底消除所有故障

答案:B。降级通过牺牲次要功能换取核心链路(如下单、支付)的可用性,B 正确。A 中性能提升是附带效果并非目标;C 成本是考量因素但不是核心;D 把消除故障视为目标过于绝对,降级恰恰承认故障不可避免。

Q2. 下列哪项属于典型的业务降级?

单选题 · easy

  • A.缩短调用超时时间
  • B.暂停非核心积分服务← 正确答案
  • C.切换数据库读写分离
  • D.扩容消息队列集群

答案:B。业务降级是直接关闭非核心业务功能,暂停积分服务就是典型例子,B 正确。A 是超时降级;C 和 D 属于技术优化手段,没有牺牲任何功能,不属于降级。

Q3. 兜底数据设计的基本原则是什么?

单选题 · mid

  • A.数据越详尽越好
  • B.静态预置快速返回← 正确答案
  • C.依赖实时动态计算
  • D.完全交由前端处理

答案:B。兜底数据要在降级前就预置好,并以最快速度返回,B 正确。A 过于详尽会导致准备和维护成本失控;C 降级时资源紧张,实时计算违背兜底初衷;D 把责任推给前端会让用户看到空白页。

Q4. 下列哪项不是自动降级触发常用的监测指标?

单选题 · mid

  • A.每秒请求数 QPS
  • B.平均响应时间 RT
  • C.服务错误率指标
  • D.代码仓库提交数量← 正确答案

答案:D。自动降级监测的是运行期实时指标:QPS 反映入口流量,RT 反映延迟恶化,错误率反映故障程度。代码仓库提交数量是研发过程指标,与系统运行时状态无关,D 正确。

Q5. 关于降级与熔断的关系,下列说法正确的是?

多选题 · mid

  • A.熔断可自动触发降级← 正确答案
  • B.两者可独立部署使用← 正确答案
  • C.降级响应速度通常更慢
  • D.降级必须依赖熔断器

答案:AB。熔断器打开后通常会联动触发调用方的降级,A 对;两者是独立机制,可单独部署,B 对。C 错在“通常更慢”没有依据,降级响应速度取决于实现;D 错在降级也可以通过阈值或人工触发,不依赖熔断器。

Q6. 系统容量 C=1000 QPS,触发阈值 70%,系统尚未降级。当前负载 720 QPS,系统应该怎么做?

单选题 · hard

  • A.立即触发降级策略← 正确答案
  • B.继续维持正常服务
  • C.马上触发降级恢复
  • D.重启系统排查隐患

答案:A。触发阈值为 1000 × 70% = 700 QPS,当前负载 720 已超过阈值,应立即触发降级,A 正确。B 忽视了阈值已被突破;C 错误,系统尚未降级,谈不上恢复;D 重启是严重误操作。

Q7. 系统已降级,正确的恢复时机是什么?

单选题 · mid

  • A.负载降到容量以下即恢复
  • B.负载降至容量乘安全系数← 正确答案
  • C.只要过了高峰立即恢复
  • D.等业务方邮件确认再恢复

答案:B。恢复阈值要低于触发阈值并乘以安全系数,避免临界区抖动,B 正确。A 直接降到容量以下就恢复太激进,流量稍反弹就会再次触发降级;C 没有量化标准;D 人工确认太慢,错失恢复窗口。

Q8. 关于降级期间的兜底策略,下列做法正确的是?

多选题 · hard

  • A.可用本地缓存做兜底← 正确答案
  • B.可用静态热门数据← 正确答案
  • C.直接返回 null 即可
  • D.需要监控兜底命中率← 正确答案

答案:ABD。本地缓存和静态热门数据都是优质的兜底数据源,A、B 对;命中率是衡量兜底效果的核心指标,必须监控,D 对。C 错,返回 null 会导致前端渲染失败,违背兜底的初衷。

Q9. 降级与限流的主要区别是什么?

单选题 · easy

  • A.降级牺牲功能限流限制流量← 正确答案
  • B.两者本质上完全相同
  • C.限流会直接关闭业务功能
  • D.降级是限制入口请求数量

答案:A。降级牺牲的是功能范围,限流限制的是请求数量,A 正确。B 错,两者机制完全不同;C 错,限流只拒绝超量请求,不关闭功能;D 把降级说成限制入口,正好与限流混淆。

Q10. 某服务容量 C=2000 QPS,降级触发阈值 75%,恢复安全系数 0.6,当前已处于降级状态,实时负载 1600 QPS。正确的做法是?

单选题 · extreme

  • A.维持降级状态不变← 正确答案
  • B.立即恢复全部服务
  • C.再次触发二次降级
  • D.重启服务进程重来

答案:A。已降级时只看恢复条件:2000 × 0.6 = 1200 QPS,当前 1600 远高于 1200,不满足恢复条件,应维持降级,A 正确。B 在未达恢复阈值时恢复会导致抖动震荡;C 二次降级没有依据,当前负载低于触发判定(1600 < 2000 × 75% = 1500 不成立,实则 1600 > 1500,但已降级不重复触发);D 重启是错误操作。