微服务熔断和降级:面试必问的容错双刃剑
最近面试是不是总被问到“熔断和降级”?这俩兄弟确实是微服务架构的保命符!今天咱们就掰开揉碎了讲清楚,下次面试官再问,直接甩出这套逻辑,稳稳拿分!
👉 2025年Java面试宝典抢先看:
点击下载《2025年Java面试高频核心宝典》
提取码:9b3g (覆盖SpringCloud Alibaba、分布式事务、JVM调优等硬核内容)
🔥 什么是微服务熔断和降级?
简单说,熔断(Circuit Breaker) 像电路保险丝:当某个服务连续失败超过阈值,直接“跳闸”拒绝后续请求,避免雪崩。降级(Fallback) 则是Plan B:主服务不可用时,返回兜底数据(比如缓存、默认值),保证核心流程可用。

(熔断器状态转换:关闭→打开→半开)
⚡️ 什么时候需要熔断和降级?
- 依赖服务超时/宕机:比如订单服务调支付接口,支付挂了,订单不能卡死
- 突发流量冲击:秒杀场景,下游服务扛不住时主动熔断非核心功能
- 资源不足:数据库连接池耗尽,降级为返回缓存数据
- 弱依赖服务异常:比如日志服务挂了,不该影响用户下单
关键点:熔断是被动触发的故障隔离,降级是主动启用的备用方案。
🛠 熔断降级实现原理(以Sentinel为例)
-
熔断策略:
- 慢调用比例(RT超时)
- 异常比例/数量
- 例如:5秒内异常超50% → 熔断10秒 → 半开试探

-
降级方案:
- 返回默认值(如商品详情页库存显示“服务繁忙”)
- 调用备用服务(读缓存代替查DB)
- 空结果(牺牲部分功能保主链路)
💡 面试这样答秒杀90%候选人
面试官:“你们项目如何做服务容错?”
你:
“我们基于Sentinel实现三级防护:
- 线程隔离:给每个服务分配独立线程池,避免资源耗尽
- 熔断降级:对非核心服务(如推荐模块)配置异常熔断策略,超过阈值直接返回降级数据
- 请求限流:网关层针对突发流量做QPS限制
特别注意:降级方案必须和产品提前约定,比如支付失败时降级为引导用户稍后重试,而不是直接显示‘支付成功’!”
🚨 避坑指南
- 别把熔断当限流用:熔断针对故障,限流针对流量
- 降级数据要可监控:所有降级操作必须打日志告警
- 半开状态谨慎设计:试探请求量过大可能压垮恢复中的服务

🎁 实战福利
如果你正在准备面试,强烈推荐用面试鸭会员题库刷题!通过 面试鸭返利网 购买会员可返利25元,实测覆盖了BATJ近3年真题,配合上面的《Java面试宝典》事半功倍!
📌 总结:熔断是“断尾求生”,降级是“留得青山在”,两者结合才能让微服务在故障中活下来。下次被问到,记住这个本质!


