熔断基础概念
熔断(Circuit Breaker)是微服务架构与API网关中一种关键的容错模式。其核心思想是:当被调用的下游服务或API持续出现故障(超时、异常、拒绝连接)时,主动切断调用链路,避免故障在系统中级联扩散,为系统提供自我修复的时间窗口。
什么是熔断
熔断机制借鉴了电力系统中的“断路器”概念。在正常情况下,断路器处于闭合状态,电流(请求)可以正常通过。当电路发生短路或过载(服务故障)时,断路器跳闸断开,保护整个电路系统。在软件系统中,熔断器监控对下游服务的调用状态,当错误率达到预设阈值时,熔断器“跳闸”,后续请求直接返回降级响应或快速失败,不再发起真正的调用。
核心目标:防止故障蔓延(Cascading Failure),避免一个服务的崩溃拖垮整个调用链。
熔断的三种状态
熔断器是一个有限状态机,包含三个核心状态:关闭(Closed)、打开(Open) 和 半开(Half-Open)。状态之间的转换由预设的阈值和计时器驱动。
状态转换逻辑:关闭 → 打开(错误率超阈值)→ 半开(等待超时后)→ 关闭(试探成功)或 打开(试探失败)。
三种状态详解
| 状态 | 含义 | 行为 | 触发条件 |
|---|---|---|---|
| 关闭 (Closed) | 熔断器闭合,系统正常运行 | 请求正常转发到下游服务;统计错误率或请求耗时 | 初始状态;或半开状态下试探成功 |
| 打开 (Open) | 熔断器断开,拒绝所有请求 | 直接返回降级响应(如错误码、缓存数据),不发起真实调用 | 错误率超过阈值(如 50%);或连续错误数超过阈值(如 10 次) |
| 半开 (Half-Open) | 熔断器部分闭合,试探性放行少量请求 | 允许有限数量的试探请求通过;根据试探结果决定状态转换 | 打开状态持续一段时间后(如 30 秒)自动进入 |
熔断与降级的关系
熔断和降级是两种紧密相关但职责不同的容错手段。在实际系统中,它们通常配合使用,形成完整的故障处理链路。
常见误区:熔断不等于降级。熔断是“切断调用”,降级是“提供替代方案”。熔断是手段,降级是结果。
| 维度 | 熔断 (Circuit Breaker) | 降级 (Degradation) |
|---|---|---|
| 核心职责 | 保护系统不被故障拖垮 | 在故障发生时提供有损服务 |
| 触发条件 | 错误率、超时、异常次数达到阈值 | 熔断触发、资源不足、人工运维 |
| 执行动作 | 切断调用链路,拒绝请求 | 返回兜底数据、缓存数据或错误提示 |
| 状态变化 | 关闭 → 打开 → 半开 → 关闭 | 通常为一次性降级,恢复后回到正常 |
| 典型场景 | 下游服务崩溃、网络分区 | 非核心功能不可用、大促时关闭次要服务 |
在模型验证环境中,当 API 限流触发熔断后,降级策略通常表现为:返回一个预设的“模型服务暂不可用”响应,或从本地缓存中返回上一次的验证结果,避免用户直接看到 5xx 错误。
最佳实践:熔断器打开时,必须同时执行降级逻辑。降级响应应包含明确的错误码(如 503)和友好的提示信息,方便客户端识别并处理。
总结来说,熔断是一种保护机制,降级是一种补偿策略。熔断器打开后,降级逻辑必须立即生效;熔断器关闭后,降级逻辑解除,系统恢复正常调用。两者共同构成了 API 网关的最后一层安全防线。