熔断器是什么
熔断器像电路里的保险丝:当下游错误率或慢调用比例超过阈值时,调用方在接下来一段时间内直接快速失败,不再把请求发往已经出问题的下游,从而避免线程、连接被长时间占满导致的级联故障。经过冷却期后进入半开状态,放少量探测流量验证下游是否恢复,正常则闭合恢复调用,仍失败则重新打开。熔断的价值在于给下游留出恢复窗口,同时让调用方更快失败。
三种状态
三种状态
CLOSED → 正常放行,按窗口统计错误率与慢调用比例
OPEN → 直接失败,不再请求下游,同时走兜底逻辑
HALF-OPEN → 放行少量探测请求;达标回 CLOSED,仍失败回 OPEN
# 触发开关:错误率或慢调用比例超过阈值且请求数达到最小样本量
# 冷却时间:可分批递增,避免下游刚恢复就被打满参数与兜底设计
| 项 | 参考做法 | 标定依据 |
|---|---|---|
| 触发阈值 | 窗口内错误率或慢调用比例(如 50%)且达到最小请求数(如 20 次) | 按压测与历史抖动幅度标定,正常波动不触发 |
| 慢调用定义 | 超过 P99 或约定的超时预算比例 | 按端到端延迟预算倒推 |
| 打开时长 | 从数秒起步,可分批递增 | 给下游恢复窗口,过长会放大影响面 |
| 半开探测 | 只放行少量请求,全部达标才闭合 | 防止瞬间恢复全量流量 |
| 兜底 | 缓存旧值、默认值或转异步,并配告警 | 没有兜底的快速失败对用户仍是不可用 |
典型使用场景
- 第三方接口不稳定:外部依赖超时拖慢整条链路,用熔断隔离
- 大促前压测:验证下游故障时核心链路仍能返回兜底结果
- 级联故障防护:避免一个下游拖垮所有调用它的服务
- 灰度发布保护:新版本错误率异常时快速切断流量
- 弱依赖降级:推荐、风控等非核心能力失败时快速返回默认值
- 批量任务保护:单个分片下游异常时暂停并告警,而不是持续重试
熔断必须配兜底结果:缓存旧值、默认值或转异步处理,否则「快速失败」对用户而言仍是一次失败,只是快了一点。
熔断与重试要一起设计:重试会在下游抖动时放大流量,通常应限制重试次数并把重试计入错误率统计,避免熔断被重试掩盖。