OlithmRouter · AI API 中轉站
OlithmRouter › 知识库 › API 故障转移与高并发:架构设计与实战配置…

API 故障转移与高并发:架构设计与实战配置

How to Handle API Failover and High Concurrency?

TL;DR — 故障转移的核心是把「失败」分类后自动换下一家:4xx(换家重试)、5xx/逾时(冷却该上游)、全部拒绝才回真实错误。高并发的关键则是:单飞(single-flight)配置刷新、按(上游×模型)粒度的冷却、流式首字超时的合理设定,以及客户端指数退避。两者合起来,才能把「上游挂掉」变成使用者无感。

本页目录

  1. 故障分类:不是所有错误都该换家
  2. 逾时设计:最容易被忽略的放大器
  3. 高并发:三个关键机制
  4. 客户端配合
  5. 常见问题

故障分类:不是所有错误都该换家

正确的分类:①401/403——这家上游的密钥被拒,换家且冷却;②404——这家没这个模型,换家不冷却;③429——限流,冷却并换家;④5xx——上游故障,冷却换家;⑤逾时/连线错——冷却换家。400/422 这类参数问题各家行为不同,稳妥做法也是先换一家试,全部拒绝才回真实 4xx。

OlithmRouter 的实作:所有 4xx/5xx/逾时都会换下一家,全部拒绝才把真实状态码回给客户端(SDK 才能正确分类「请求错了」还是「服务挂了」);冷却以(上游×模型)为键、指数退避,冷却中的上游排到候选尾端但仍保留——避免「全冷却时直接全灭」。

逾时设计:最容易被忽略的放大器

上游逾时要涵盖「连线+回应头+首字」,而不是只看 body。设太长(如 300 秒):一个假死的上游会吃掉整个重试预算;设太短:慢模型会被误杀。建议按模型等级区分,并确保「逾时也算失败、触发换家」。

流式请求要注意:换家只能在「还没向客户端吐出任何位元组」之前进行;已经开始输出后上游断流,只能中止并由客户端重试——这是所有闸道的物理限制。

高并发:三个关键机制

①配置刷新单飞:密钥/上游清单不能每个请求都拉一次,要用定期缓存+单飞刷新,否则高并发时配置端点会被打爆。②冷却不挡路:故障上游进冷却后仍保留在候选尾端,全冷却时照样服务而不是 503。③并发分摊:请求量超过阈值时把轮转起点平移到其他上游,避免全部压在第一家。

OlithmRouter 另有会话黏性(同一对话黏同一家上游)——让上游的 prompt 缓存持续命中,多轮对话的成本直接下降,且黏性只是「偏好」不是「锁定」,上游故障时照样换家。

客户端配合

闸道做得再好,客户端也要守基本礼仪:指数退避重试、尊重 429 的 Retry-After、以及把 request_id 写进自己的日志以便对帐。两边配合,上游故障才能真正「使用者无感」。

常见问题

故障转移会不会重复扣费?
不会。只有最终成功的那次呼叫才计费;换家过程中的失败尝试按 0 token 记录,不收费。OlithmRouter 的用量日志逐笔可核。
上游全部挂掉怎么办?
闸道会把最后一个真实错误回给你(而不是笼统的 502),你可以据此决定降级策略。选上游地域分散的服务商可降低同时全挂的机率。
高并发下要不要自己写重试?
要,但只在客户端层做轻量退避;换家逻辑应该交给闸道——两层都写重试会互相放大。
怎么知道是哪家上游挂了?
OlithmRouter 的控制台与日志会记录每次尝试的上游、状态与错误分类,故障定位不用猜。

相关文章

准备好试用了吗?

OlithmRouter 提供 48+ 主流模型、多级分组定价与免费体验分组——注册后建立一把密钥即可开始。

OlithmRouter模型与价格接入文档