什么是服务雪崩?熔断和降级怎么做?

后端开发第 13 / 13 题答题框架
参考思路:雪崩链条(故障扩散)→舱壁隔离(线程池/信号量)→熔断器三态转换(关闭/打开/半开)→降级策略(兜底数据/有损服务)。结合 Sentinel/Hystrix 经验。

五个经典回答示范

回答一 · 校招应届版

服务雪崩是强依赖链上一个服务变慢,拖垮调用方线程池,进而扩散到整条链路。防御三件套:舱壁隔离——每个依赖独立线程池或信号量,故障不传染;熔断——错误率超阈值打开断路器,快速失败一段时间后半开试探恢复;降级——熔断期间返回兜底数据或友好提示,有损但可用。

回答二 · 1-3年经验版

我讲一次实战:推荐服务抖动导致商品页大量超时。当时线程池被推荐调用占满,连核心的库存查询都被拖死——这就是没有舱壁隔离的代价。整改:按依赖拆线程池配独立队列与超时;推荐调用加熔断,异常比例超 50% 三秒内打开,走静态推荐兜底;再加接口级限流保护。之后同类故障影响面从整站缩小到单个模块。

回答三 · 资深版

我按三态模型讲原理:closed 正常统计请求;错误率或慢调用比例越阈、或达到最低请求数后 open,直接拒绝不再发请求;休眠期后 half-open 放少量试探请求,成功恢复、失败回到 open。工程上强调参数联动:熔断阈值、统计窗口、半开请求数、恢复策略要一起调;以及手动熔断开关作为运维预案。治理层面要把熔断配置纳入服务治理平台统一管理。

回答四 · 追问应对

追问『熔断和限流的区别』:限流是防过载控制入口量,熔断是故障时切断出口调用,常配合使用;『降级数据怎么来』:缓存快照、默认值、静态配置、异步刷新的简化结果,要向用户明示『部分数据』;『重试和熔断冲突吗』:重试放大流量,必须有重试预算,熔断优先级高于重试。

回答五 · 反面示范

『雪崩就是服务挂多了,多部署几个副本做集群高可用就不会雪崩了,熔断那些框架配置太复杂,我们没用也运行得很好。』——点评:高可用防节点故障,防不了强依赖变慢这种『活着但病着』的故障;线程池耗尽与线程堆积恰恰是副本数救不了的。没出事不等于设计正确。

怎么练这道题
  1. 打开 模拟练习,选择「后端开发」方向,限时 3 分钟作答本题。
  2. 对照上方答题框架,逐点检查:哪些要素没覆盖、哪里表达啰嗦。
  3. 用自己项目的真实经历替换框架中的占位内容,重讲一遍并录音回听。

这类题在真实面试中常被追问细节,
建议进入限时模式练一遍。

开始限时演练