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模型與價格接入文檔