返回項目OBJECT / 02
ORBITAL OBJECTS 構建中

Airlock / 氣閘網關

面向多服務入口的輕量網關:路由、鑑權、限流、超時與可觀測性收斂在一層。

年份2026
技術Go · Redis · OpenTelemetry
INDEX02 / 04
2026 年 11 月 12 日

Airlock 是一個面向多服務入口的輕量網關。它不承載業務邏輯,只負責判斷一個請求是否應該進入、應該進入哪裡,以及進入之後如何被觀察。

項目最初的動機很直接:當服務數量增加後,鑑權、限流、超時、重試和日誌會在每個服務裡重複出現。與其讓每個團隊各自維護一套策略,不如把這些邊界問題收斂到一層。

請求如何通過

一次請求會經過固定的幾段路徑:

  1. 監聽器接受連接,解析協議與基礎元數據;
  2. 路由層根據 host、path 和 header 選擇上游;
  3. 中間件鏈依次處理 request id、身份、限流、超時預算和重試策略;
  4. 上游選擇器讀取健康狀態,選擇一個可用實例;
  5. 響應返回時記錄狀態碼、延遲和上游信息。

路由和中間件都通過配置描述,而不是寫死在代碼裡。目標是讓新增一個上游只需要改配置,不需要重新理解整個入口。

邊界與取捨

網關最容易犯的錯誤是慢慢長成第二個業務系統。Airlock 明確不處理業務編排、不做數據庫訪問,也不替上游決定領域規則。

它只做幾件事:

  • 認證與身份透傳;
  • 按路由和租戶限流;
  • 為每條路由設置獨立的超時預算;
  • 對冪等請求做有限重試;
  • 在上游異常時快速失敗並熔斷。

重試只發生在明確可重試的請求上。否則,網關會把一次失敗放大成多次寫入。

可觀測性

每個請求從入口開始攜帶 request id,並在日誌、指標和 trace 中繼續傳遞。除了常規的 QPS 和錯誤率,還會分別記錄上游延遲、限流命中、重試次數和熔斷狀態。

健康檢查不只看端口是否存活,還會觀察最近一段時間的錯誤率和延遲。一個能接受連接但持續超時的上游,不應該繼續接收新請求。

當前狀態

目前正在搭建路由、中間件鏈和配置熱更新,限流先支持進程內計數,再接入 Redis 做多實例共享。下一步會補充管理接口、灰度路由和壓測腳本。

好的網關在正常時應該是隱形的;出問題時,它必須把原因說清楚。

這篇記錄還有另一種語言的版本。閱讀英文版