面试知识库
高 进阶

熔断降级原理#

一句话答案#

熔断器三态:Closed(正常统计)→Open(错误率超阈值,快速失败)→Half-Open(试探恢复),防止故障级联。

核心要点

熔断器状态机:

  • Closed:正常放行,统计错误率
  • Open:错误率超阈值 → 直接拒绝(快速失败)
  • Half-Open:超时后放行少量请求试探 → 成功关闭 / 失败继续打开(Sentinel 只放 1 个探测请求;Resilience4j 由 permittedNumberOfCallsInHalfOpenState 控制,默认 10)

降级策略: 返回默认值 / 返回缓存 / 走备用逻辑

面试回答(2分钟版)

熔断和降级是微服务防止级联故障的核心机制。熔断器本质是一个状态机,有三种状态:Closed 状态下正常放行请求并统计错误率;当错误率超过阈值比如 50% 时跳到 Open 状态,此时所有请求直接快速失败不再调用下游,避免故障扩散;经过一段冷却时间后进入 Half-Open 状态,放行少量请求试探下游是否恢复,成功则回到 Closed,失败则继续 Open。降级是熔断触发后的兜底策略,常见有三种:返回默认值比如推荐服务挂了返回热门榜单、返回缓存数据、或者直接关闭非核心功能只保核心链路。熔断和限流容易混淆但目的不同:限流是保护自己不被流量打垮,是入口防护;熔断是保护调用方不被故障下游拖垮,是出口防护。生产中主要用 Sentinel 来实现,它支持慢调用比例、异常比例、异常数三种熔断策略,还自带 Dashboard 可以动态调整规则。另一个主流选择是 Resilience4j(Spring Cloud CircuitBreaker 的常用实现);Hystrix 已进入维护模式、不再发新版本,新项目不要再选。

追问与易错

追问方向:

  • “熔断和限流区别?”→ 限流是保护自己不被流量打垮(入口防护,控制请求速率),熔断是保护调用方不被故障下游拖垮(出口防护,快速失败避免级联)
  • “降级策略有哪些?”→ 返回默认值(如推荐服务挂了返回热门榜单)、返回缓存数据、关闭非核心功能只保核心链路、排队等待(流量削峰)
  • “Half-Open 失败怎么办?”→ 重新回到 Open 状态继续熔断,等待下一个冷却周期后再次进入 Half-Open 试探;试探请求数 Sentinel 固定为 1 个,Resilience4j 可配置(默认 10)

易错点:

  • ❌ 熔断就是不让请求通过——Open 是快速失败返回兜底值
  • ❌ 错误率一超阈值就熔断——还要达到最小请求数(Sentinel minRequestAmount 默认 5,Resilience4j minimumNumberOfCalls 默认 100),否则低流量时 1 次失败就可能误熔断
  • ❌ 熔断只看异常——慢调用同样会拖垮调用方线程池,Sentinel 的慢调用比例、Resilience4j 的 slowCallRateThreshold 都按响应时间熔断