# 什么是服务熔断?

4 min read
Table of Contents

什么是服务熔断?

【核心定义】
服务熔断是一种在分布式系统中防止故障扩散的快速失败机制,当某个服务的错误率或响应时间超过阈值时,系统会自动切断对该服务的调用,直接返回预设的降级响应,避免资源耗尽和级联故障。

【关键要点】

  1. 熔断器模式:熔断器(Circuit Breaker)有三种状态——关闭(正常调用)、打开(快速失败)、半开(试探性恢复),通过状态机实现自动切换。
  2. 触发条件:基于错误率、慢调用比例、请求量等指标阈值(如 Hystrix 默认错误率 >50%),达到阈值后触发熔断。
  3. 降级策略:熔断后返回预设的 fallback 结果(如缓存数据、默认值),避免用户等待或系统阻塞。
  4. 自动恢复:熔断后经过休眠时间(如 5 秒)进入半开状态,允许少量请求试探,成功则关闭熔断器,失败则继续保持打开。

【深度推导/细节】

  • 核心矛盾:服务依赖链中,若下游服务因过载或故障响应变慢,上游持续等待会耗尽线程池,引发雪崩。
  • 逻辑拆解:
    Step 1:监控窗口(如 10 秒)内统计请求失败率,达到阈值则触发熔断。
    Step 2:熔断器打开后,所有请求直接走降级逻辑,不再调用下游。
    Step 3:经过休眠期后,允许一个请求试探下游是否恢复,成功则关闭熔断,否则重置休眠期。

【关联/对比】

  • 与降级对比:服务降级是主动关闭非核心功能保障核心链路;熔断是被动基于故障触发的保护机制,二者常结合使用。
  • 与限流对比:限流控制请求速率,防止过载;熔断针对故障服务直接切断调用,目标不同但可协同工作。

『面试官追问』

  1. 熔断器半开状态为什么是必要的?
    • 答:避免服务恢复后仍被持续熔断,通过试探性请求验证可用性,实现自动恢复。
  2. 如何设置合理的熔断阈值和休眠时间?
    • 答:根据业务 SLA 和监控数据动态调整,错误率阈值通常设为 30%50%,休眠时间需大于下游服务平均恢复时间(如 530 秒)。
  3. 熔断可能引发什么问题?
    • 答:误熔断(如网络抖动触发)、恢复延迟(半开试探失败重复熔断),需结合超时、重试等策略优化。

【线程安全与版本差异】

  • 线程安全:熔断器状态变更需保证原子性(如用 AtomicReference),统计指标需线程安全(如滑动窗口计数器)。
  • 版本差异:早期 Netflix Hystrix 需手动配置,现代框架如 Sentinel、Resilience4j 支持动态规则配置和更细粒度的控制(如基于异常类型熔断)。
My avatar

文章看完了,不打算去别的篇章转转吗?👀 感谢你的耐心阅读!如果你有问题想探讨,或者发现了文中的 Bug,请务必通过页脚的链接联系我


More Posts

# 什么是服务降级?

6 min read

服务降级是一种在系统资源紧张或依赖服务异常时,通过主动关闭或简化非核心功能,以保障核心业务可用性和系统整体稳定性的容错策略。

Read

Comments