# 什么是服务熔断?
4 min read
Table of Contents
什么是服务熔断?
【核心定义】
服务熔断是一种在分布式系统中防止故障扩散的快速失败机制,当某个服务的错误率或响应时间超过阈值时,系统会自动切断对该服务的调用,直接返回预设的降级响应,避免资源耗尽和级联故障。
【关键要点】
- 熔断器模式:熔断器(Circuit Breaker)有三种状态——关闭(正常调用)、打开(快速失败)、半开(试探性恢复),通过状态机实现自动切换。
- 触发条件:基于错误率、慢调用比例、请求量等指标阈值(如 Hystrix 默认错误率 >50%),达到阈值后触发熔断。
- 降级策略:熔断后返回预设的 fallback 结果(如缓存数据、默认值),避免用户等待或系统阻塞。
- 自动恢复:熔断后经过休眠时间(如 5 秒)进入半开状态,允许少量请求试探,成功则关闭熔断器,失败则继续保持打开。
【深度推导/细节】
- 核心矛盾:服务依赖链中,若下游服务因过载或故障响应变慢,上游持续等待会耗尽线程池,引发雪崩。
- 逻辑拆解:
Step 1:监控窗口(如 10 秒)内统计请求失败率,达到阈值则触发熔断。
Step 2:熔断器打开后,所有请求直接走降级逻辑,不再调用下游。
Step 3:经过休眠期后,允许一个请求试探下游是否恢复,成功则关闭熔断,否则重置休眠期。
【关联/对比】
- 与降级对比:服务降级是主动关闭非核心功能保障核心链路;熔断是被动基于故障触发的保护机制,二者常结合使用。
- 与限流对比:限流控制请求速率,防止过载;熔断针对故障服务直接切断调用,目标不同但可协同工作。
『面试官追问』
- 熔断器半开状态为什么是必要的?
- 答:避免服务恢复后仍被持续熔断,通过试探性请求验证可用性,实现自动恢复。
- 如何设置合理的熔断阈值和休眠时间?
- 答:根据业务 SLA 和监控数据动态调整,错误率阈值通常设为 30%
50%,休眠时间需大于下游服务平均恢复时间(如 530 秒)。
- 答:根据业务 SLA 和监控数据动态调整,错误率阈值通常设为 30%
- 熔断可能引发什么问题?
- 答:误熔断(如网络抖动触发)、恢复延迟(半开试探失败重复熔断),需结合超时、重试等策略优化。
【线程安全与版本差异】
- 线程安全:熔断器状态变更需保证原子性(如用 AtomicReference),统计指标需线程安全(如滑动窗口计数器)。
- 版本差异:早期 Netflix Hystrix 需手动配置,现代框架如 Sentinel、Resilience4j 支持动态规则配置和更细粒度的控制(如基于异常类型熔断)。