熔断基础概念

熔断(Circuit Breaker)是微服务架构与API网关中一种关键的容错模式。其核心思想是:当被调用的下游服务或API持续出现故障(超时、异常、拒绝连接)时,主动切断调用链路,避免故障在系统中级联扩散,为系统提供自我修复的时间窗口。

什么是熔断

熔断机制借鉴了电力系统中的“断路器”概念。在正常情况下,断路器处于闭合状态,电流(请求)可以正常通过。当电路发生短路或过载(服务故障)时,断路器跳闸断开,保护整个电路系统。在软件系统中,熔断器监控对下游服务的调用状态,当错误率达到预设阈值时,熔断器“跳闸”,后续请求直接返回降级响应或快速失败,不再发起真正的调用。

核心目标:防止故障蔓延(Cascading Failure),避免一个服务的崩溃拖垮整个调用链。

熔断的三种状态

熔断器是一个有限状态机,包含三个核心状态:关闭(Closed)、打开(Open) 和 半开(Half-Open)。状态之间的转换由预设的阈值和计时器驱动。

状态转换逻辑:关闭 → 打开(错误率超阈值)→ 半开(等待超时后)→ 关闭(试探成功)或 打开(试探失败)。
熔断器三种状态转换图 熔断器三种状态转换图 关闭 (Closed) 正常调用 打开 (Open) 快速失败 半开 (Half-Open) 试探请求 错误率超阈值 超时自动转换 试探成功 → 重置计数器 试探失败 状态转换说明 关闭 → 打开:错误率或请求数达到阈值;打开 → 半开:等待超时后自动进入; 半开 → 关闭:试探请求成功,系统恢复;半开 → 打开:试探请求失败,继续熔断。

三种状态详解

状态 含义 行为 触发条件
关闭 (Closed) 熔断器闭合,系统正常运行 请求正常转发到下游服务;统计错误率或请求耗时 初始状态;或半开状态下试探成功
打开 (Open) 熔断器断开,拒绝所有请求 直接返回降级响应(如错误码、缓存数据),不发起真实调用 错误率超过阈值(如 50%);或连续错误数超过阈值(如 10 次)
半开 (Half-Open) 熔断器部分闭合,试探性放行少量请求 允许有限数量的试探请求通过;根据试探结果决定状态转换 打开状态持续一段时间后(如 30 秒)自动进入

熔断与降级的关系

熔断和降级是两种紧密相关但职责不同的容错手段。在实际系统中,它们通常配合使用,形成完整的故障处理链路。

常见误区:熔断不等于降级。熔断是“切断调用”,降级是“提供替代方案”。熔断是手段,降级是结果。
维度 熔断 (Circuit Breaker) 降级 (Degradation)
核心职责 保护系统不被故障拖垮 在故障发生时提供有损服务
触发条件 错误率、超时、异常次数达到阈值 熔断触发、资源不足、人工运维
执行动作 切断调用链路,拒绝请求 返回兜底数据、缓存数据或错误提示
状态变化 关闭 → 打开 → 半开 → 关闭 通常为一次性降级,恢复后回到正常
典型场景 下游服务崩溃、网络分区 非核心功能不可用、大促时关闭次要服务

在模型验证环境中,当 API 限流触发熔断后,降级策略通常表现为:返回一个预设的“模型服务暂不可用”响应,或从本地缓存中返回上一次的验证结果,避免用户直接看到 5xx 错误。

最佳实践:熔断器打开时,必须同时执行降级逻辑。降级响应应包含明确的错误码(如 503)和友好的提示信息,方便客户端识别并处理。
熔断与降级协作流程图 熔断与降级协作流程 API 请求到达 熔断器状态判断 关闭 → 正常调用 打开/半开 → 降级 正常 熔断

总结来说,熔断是一种保护机制,降级是一种补偿策略。熔断器打开后,降级逻辑必须立即生效;熔断器关闭后,降级逻辑解除,系统恢复正常调用。两者共同构成了 API 网关的最后一层安全防线。