
连续几次失败后把供应商标成不可用,代码很容易写。难点在恢复:如果所有请求同时看到冷却期结束,都去“试一下”,恢复中的服务会再次被打满;如果从来没有探测,它又可能永远留在黑名单里。
错误率不能直接翻译成机房宕机
429 可能来自租户配额,400 可能是参数错误,401 更可能是凭证问题。将它们混进同一个全局失败窗口,会把单租户故障扩大成全站切流。先按供应商、区域、模型和可用能力划分健康域,再决定哪些错误参与健康统计。
模型路由也不只是换 URL。上下文长度、工具参数格式和输出结构可能不同。Decisions 文档明确规定了所支持的模型和独立问题的批处理边界;不能因为接口同属一家厂商,就假设任何备用模型都支持同样请求。

冷却结束只放一个探测者
下面用显式时间参数演示门控。为聚焦状态迁移,连续两次失败就打开,省略了生产中更合适的滚动样本和最小请求量门槛。
public class Demo {
static class Breaker {
int failures;
boolean open;
boolean probe;
long retryAt;
synchronized boolean permit(long now) {
if (!open) return true;
if (now < retryAt || probe) return false;
probe = true;
return true;
}
synchronized void finish(boolean success, long now) {
if (open && !probe) throw new IllegalStateException("no probe");
if (success) {
failures = 0; open = false; probe = false;
} else if (open || ++failures >= 2) {
open = true; probe = false; retryAt = Math.addExact(now, 30);
}
}
}
public static void main(String[] args) {
Breaker b = new Breaker();
if (!b.permit(0)) throw new AssertionError(); b.finish(false, 0);
if (!b.permit(1)) throw new AssertionError(); b.finish(false, 1);
if (b.permit(30)) throw new AssertionError("cooldown bypassed");
if (!b.permit(31) || b.permit(31)) throw new AssertionError("probe storm");
b.finish(false, 31);
if (b.permit(60) || !b.permit(61)) throw new AssertionError();
b.finish(true, 61);
if (!b.permit(62)) throw new AssertionError("not recovered");
System.out.println("cooldown, single probe and recovery checked");
}
}
保存为 Demo.java,执行 javac --release 11 Demo.java、java Demo。示例不支持多个并行在途请求的世代归属;生产中要给 permit 返回租约或世代号,防止熔断前的迟到成功把新一轮熔断提前关闭。这个限制不能靠 synchronized 消除。
切换只承诺自己真正能守住的部分
备用通道要提前验证权限、配额、结构化输出与工具能力。已经向用户显示的内容无法通过后端重试自动撤回,已经执行的工具也不能重复调用。对不兼容请求,返回清晰降级结果常常比硬切更可控。
这里没有制造供应商宕机,没有测得毫秒级跨云恢复,也没有“零损失”保证。可验证的是门控状态;真实切流还需压测、错误分类、请求世代和容量预留共同成立。
本地运行环境为 Java/javac 12.0.1,使用 --release 11 编译并执行了文中的检查;没有安装新依赖。该结果只覆盖示例列出的逻辑,不代表真实模型、浏览器或生产链路已经验证。
本文探讨跨厂商服务切换中熔断器的受控探测机制,强调错误分类(如400/401/429)对健康统计的影响,提出按供应商、区域、模型划分健康域;分析冷却期后单探测者机制的设计要点,包括世代号防迟到响应、门控状态迁移;并指出模型路由需兼顾上下文长度、工具参数与输出结构兼容性,备用通道须提前验证权限、配额与能力,避免不可逆副作用。

1万+

被折叠的 条评论
为什么被折叠?



