详细解释
熔断器(Circuit Breaker,电路断路器) 名字来源于现实世界的空气开关——电流过载时自动跳闸,保护整个电路不被烧。软件里的熔断器完全是这个思路:假设你接了 3 家大模型厂商,其中一家忽然挂了(连续 5xx、超时、429),如果你还不停往它发请求,每个请求都要等 30 秒超时才失败,会把你的服务线程池 / 连接池也拖死,最后形成雪崩(一个下游挂了 → 你挂了 → 你的所有上游跟着挂)。
熔断器就是那道自动跳闸的开关:连续失败超过阈值 → 自动打开 → 一段时间内所有发往这个上游的请求立刻失败,不真发出去(fast-fail),线程立即释放 → 留给其他健康的上游或备用方案。
三种状态:闭合 / 打开 / 半开
| 状态 | 含义 | 行为 |
|---|---|---|
| 🔘 闭合(Closed) | 正常态 | 所有请求正常发;统计最近 N 次请求的错误率 |
| 🔴 打开(Open) | 熔断态 | 错误率 > 阈值 → 打开;对新请求直接 fast-fail 返回错误,不发出去 |
| 🟡 半开(Half-Open) | 恢复探测态 | 打开一段时间后(如 30 秒),尝试放行极少数探测请求:如果成功 → 回到闭合;如果仍失败 → 继续打开,重置冷却时间 |
典型参数设置
滑动窗口大小:最近 20 次请求
错误率阈值:50% 失败(含 5xx、超时、429 重试用尽)
冷却时间:30 秒(打开 30s 后进入半开)
半开探测请求数:1–2 个(不一下全部放开,防止再次打挂)
熔断器 + 重试 + Fallback 的黄金三层
1) 熔断器(电路级闸门,最外层):上游挂了直接 fast-fail,不再浪费重试
2) 指数退避重试(单请求级):偶发抖动内部消化(通常 2–3 次)
3) Fallback 故障转移(路由级):熔断器打开后切到其他可用模型/厂商
三层配合才能让服务真稳:只有重试没有熔断 = 重试风暴;只有熔断没有 Fallback = 熔断后直接不可用;只有 Fallback 没有重试 = 偶发抖动也切模型。
唯元智创(Weimeta)SDK 默认内置了完整的三层组合:每个上游独立维护一个熔断器 + 自动故障转移,可配置。企业客户还可通过控制台配置半开探测策略、自定义 5xx 错误降级链等。
常见问题
触发熔断后用户会看到什么?
如果你配置了 Fallback 作为后备 → 用户几乎无感知,只是请求切到了备用模型;如果没有 Fallback 或者所有上游都熔断 → 返回一个统一的 503 “请稍后重试”友好提示,并配好告警让工程师立刻介入。