上游服务出问题时,网关如何接住请求?从健康检查、熔断、热备到降级策略,拆解自动故障切换的实现方式。
上游供应商各自的可用率约为 99.9%,网关如何在此基础上实现 99.99%?关键在于让不同供应商的故障彼此隔离,持续检查服务健康状态,并由路由层在个位数毫秒内决定请求该发往哪里。
健康检查
我们每两秒向各个上游端点发送一次模拟请求,检查实际推理链路,而不只看供应商的状态页。检查内容包括 P50、P99 延迟、错误率,以及响应格式是否正确。延迟开始偏离正常范围,往往比报错更早出现,因此服务尚未返回错误时,就可能被标记为降级。
熔断器如何分流请求
- 关闭状态:按正常规则路由,所有流量都可以通过。
- 半开状态:用 5% 的流量检查服务是否恢复,其余流量发往备用端点。
- 打开状态:停止向该端点发送流量,连续 30 次健康探测成功后才重新开放。
为什么需要热备
如果故障发生后才连接备用端点,请求还要等待建连,以及供应商可能出现的冷启动。我们会提前与备用端点保持持久连接,在切换时将正在处理的请求重新发送过去。这样,客户端收到的是一次稍慢的响应,而不是错误。
理想的故障切换不需要用户介入。路由层增加的延迟中位数低于 4 毫秒;如果发生完整切换,受影响请求会额外等待 180–400 毫秒。
降级策略
如果同等能力的模型都不可用,可以选择切换到更便宜的档位、返回过期缓存,或直接返回失败。对于一些 Agent 任务,错误答案的代价比没有答案更高;这时,默认快速失败比悄悄降低回答质量更合适。