← 返回题目列表

服务降级策略怎么设计?

高频 中等 第 5 / 26 题 更新于 2026/09/30
服务降级核心链路过载保护恢复策略
学习 AI 实战项目

简化版

服务降级是在资源不足或依赖异常时,主动关闭非核心能力、降低结果精度或改用缓存,从而保住核心链路。 设计重点是先定义业务优先级,再为每项能力明确触发条件、降级结果、数据语义和恢复条件;降级不能把失败伪装成成功。

详细版

先把功能分为不可降级、可损失体验、可延后处理三类。例如下单扣款不可返回假成功,推荐可以返回热门榜单,积分发放可记录待处理事件后异步补偿。触发信号可来自错误率、P99、线程池水位、依赖熔断或人工开关,并要求持续多个窗口,避免瞬时抖动。

降级规则要包含作用范围、优先级、TTL、审批人、审计记录和自动退出门槛。恢复采用阶梯放量,不应指标刚好转就全量开启。上线前必须验证默认值是否会污染缓存、影响计费或破坏客户端契约。

完整版教学

一、降级是在做业务取舍

机器资源有限,故障时不可能让所有功能保持同一质量。降级把资源优先给登录、交易、支付等核心路径,牺牲装饰、推荐、统计或实时性。它与“代码报错后随便返回空”不同,前者是事先评审过的产品行为,后者可能制造静默数据错误。

心法:先回答“最坏时必须保住什么”,再决定“哪些体验可以暂时变差”。

二、建立能力分级清单

等级示例故障时动作数据要求
L0 核心写扣款、下单限流或明确失败不能假成功
L1 核心读订单查询缓存、只读副本标注可能延迟
L2 体验功能推荐、评论数默认值或静态榜单可短暂陈旧
L3 延后任务积分、通知入待办队列最终补偿

同一服务里的接口也可能属于不同等级,不能按“服务名”粗暴开关。清单还应标出依赖、资源占用、负责人和最大允许降级时间,事故中才能快速决策。

三、降级形态与语义边界

常见形态有关闭入口、返回缓存、降低精度、减少字段、转异步和只读模式。选型取决于调用契约:搜索可从个性化排序退到关键词排序,但库存不能把未知数量当作充足。返回缓存时应携带数据时间或降级标志,让调用方知道结果质量变化。

{
  "items": [],
  "degraded": true,
  "reason": "RECOMMENDATION_UNAVAILABLE",
  "dataAsOf": "2026-09-30T10:00:00Z"
}

四、自动触发必须防抖

假设推荐依赖平时 P99 为 180ms,可设置连续 3 个 10 秒窗口 P99 超过 800ms 且错误率超过 5% 才进入降级。两个条件组合能减少单个异常样本误触发。人工开关用于指标未覆盖的新故障,但必须有双人审批、操作审计和 TTL,防止永久遗忘。

NORMAL --阈值连续超标--> DEGRADED
DEGRADED --健康5个窗口--> RECOVERING
RECOVERING --10%/30%/100%放量--> NORMAL
RECOVERING --再次恶化--> DEGRADED

五、容量数字如何证明有效

某实例最多稳定处理 1200 QPS,其中核心链路 800 QPS、推荐 500 QPS、统计 200 QPS,总需求 1500 QPS。关闭统计并把推荐降到 100 QPS 后,总量变为 900 QPS,才真正回到容量线下。如果降级动作只省 20 QPS,就算开关成功也无法止血。

评审每项策略时要估算释放多少线程、连接、CPU 或下游 QPS。否则“降级了页面角标”与数据库连接池耗尽没有因果关系。

六、恢复比进入更谨慎

故障刚恢复时缓存可能冷、积压仍高、下游还在回放数据。直接全量恢复会造成二次峰值,所以先小流量验证,再逐级开放。恢复判据既看依赖健康,也看本地队列与连接池水位;旧降级缓存还要设版本和过期时间,避免恢复后继续覆盖新结果。

观测要区分原始失败、降级命中和真实成功。若把降级响应都算成功,SLA 看板会一片绿色而用户只能看到空页面。业务指标如支付转化、搜索零结果率同样是必要信号。

七、常见误区与追问

  • 误区:降级就是统一返回空对象。 空值可能违反客户端约定,也可能掩盖核心写操作失败。
  • 误区:有熔断器就不需要降级设计。 熔断决定是否调用,降级决定不调用后向用户提供什么。
  • 误区:指标恢复就立刻全量退出。 冷缓存和积压会制造第二次冲击,应阶梯恢复。
  • 误区:人工开关可以没有有效期。 长期开启会让功能悄悄失效,必须 TTL 与提醒。
  • 追问:降级数据能否写缓存? 可以,但要用独立标记和短 TTL,避免污染正常结果。
  • 追问:如何测试降级? 注入依赖超时与过载,核对触发时间、释放容量、响应语义和恢复路径。
  • 追问:客户端不认识新降级字段怎么办? 保持原协议兼容,同时用状态码、旧字段合法值和灰度验证处理。

八、加强记忆

服务降级可以记成“分级、触发、替代、标识、恢复”:给能力排业务优先级,用组合阈值或审计开关触发,选择不破坏业务语义的替代结果,让调用方和监控看见降级,最后按阶梯恢复。把释放容量的数字算出来,才能证明策略真的保护了核心链路。