AGENTIC COMMONSAI 產業簡報

繁中EN

主題AI 晶片與算力出版

返回文章列表

把資料庫呼叫藏起來之後:OpenAI 的 Habitat 如何撐住每秒 7,000 萬次請求

本頁內容6 個段落
  1. 把儲存層抽成服務,真正買到的是協調成本的下降
  2. 他們明知 Python 不划算,卻還是先選了它
  3. 拖垮尾延遲的不是資料庫,而是 event loop
  4. profiling 揪出的兩個具體 bug
  5. 這些經驗對產品開發者意味著什麼
  6. 參考來源

摘要: 就這篇由 OpenAI 親自發布的說明來看,Habitat 現在每秒要消化超過 7,000 萬次請求,它所支撐的產品每週有超過 10 億人使用,部署版圖橫跨近 40 個地理區域,管理的資料量超過 500 PB。 此刻要解決的並不是成本最佳化,而是讓產品開發者不再被卡住、讓平台先穩定下來。 如果平均每個使用者請求會觸發數百次資料庫呼叫,那麼使用者實際感受到的,就是最慢的那一次。

使用者按一次送出,背後可能就散成上百次資料庫查詢;而使用者唯一感受到的,是其中跑得最慢的那一次。OpenAI 在 2026 年 9 月 11 日發布的技術文章,正是用這個畫面開場,也順帶交代了線上儲存平台 Habitat 為何必須存在——只要有一次查詢變慢,產品在該使用者眼裡就是慢的;只要有一次查詢失敗,產品當下就等於不能用。

就這篇由 OpenAI 親自發布的說明來看,Habitat 現在每秒要消化超過 7,000 萬次請求,它所支撐的產品每週有超過 10 億人使用,部署版圖橫跨近 40 個地理區域,管理的資料量超過 500 PB。而成長曲線才是更值得注意的地方:最近三年,這套系統每年都以超過 10 倍的幅度擴張。

把儲存層抽成服務,真正買到的是協調成本的下降

Habitat 在 2024 年中剛問世時,形式極為單純:一個連向 Azure Cosmos DB 的 Python 客戶端函式庫。它替產品工程師擋下了一整排雜事,schema 查詢、路由、授權、加密、序列化、請求塑形與連線池,都不必由他們自己扛。

2025 年中,這個做法撐不下去了。OpenAI 提出的例子很具體:他們想把最關鍵的資料集搬到一組位在不同區域的 Cosmos DB 帳號上,藉此壓縮單一區域故障時的波及範圍。要完成這一步,客戶端必須先加上額外的路由邏輯、用 feature flag 把它包起來、確認每個客戶端都收到推送,然後才能把開關扳開。光是跨數十個服務協調部署就耗掉數天;為了驗證 sharding 邏輯是否正確而補上 shadowing,又是數天;中途發現 bug 需要修,再吃掉數天。等他們總算要開 flag,卻有團隊因為毫不相干的理由回滾到仍帶著 bug 的舊客戶端,結果把他們千方百計想避開的故障真的引發了。

儲存邏輯改由獨立服務承接後,部署、可觀測性與平台層的改進從此有了同一個施力點。OpenAI 還把這一層當作安全上的收斂點:存取控制政策、稽核日誌,以及對底層儲存資源的存取限制,全部集中在這裡執行。

他們明知 Python 不划算,卻還是先選了它

Habitat 服務本身是用 Python 寫成的。OpenAI 對這件事毫不迴避:與把邏輯放在本地函式庫執行相比,改寫成 Python 服務會多出一層網路延遲,CPU 與記憶體的擴充成本也相當可觀,而這些低效在 100 倍規模下根本不可能被接受,未來幾乎確定得重寫一遍。

他們把這筆代價記在策略性技術債的帳上。此刻要解決的並不是成本最佳化,而是讓產品開發者不再被卡住、讓平台先穩定下來。同時他們還押了另一個注:自家 coding model 的進步速度會夠快,等到非遷移不可的那天,Codex 與 GPT 能讓遷移變得可行——而這個賭注後來證明是對的。

這種先買下時間、之後再回頭補地基的順序安排,與我們在前綴感知路由:讓 KV cache 不再被隨機打散裡看到的取捨屬於同一類問題:延遲預算就那麼多,你得先判斷哪一段可以暫時不完美。

拖垮尾延遲的不是資料庫,而是 event loop

如果平均每個使用者請求會觸發數百次資料庫呼叫,那麼使用者實際感受到的,就是最慢的那一次。OpenAI 指出,在這樣的規模下運行 Python 服務,最主要的管理難題就是尾延遲。

他們的觀察相當具體:asyncio 能讓 I/O 密集的工作併發起來,卻既繞不開 GIL,也提供不了 CPU 平行。Habitat 除了轉發請求,還要負責路由、壓縮、加密、checksum、下游健康檢查、請求 shadowing 與 hedging 這些吃 CPU 的工作。在 p99 以上的延遲軌跡裡,下游儲存端其實回應得很快,真正卡住的是請求本身——它在等一個協程被重新排程,好去解析回應。

為了量出 event loop 的排程延遲,他們用了一個實測做法:定期把背景任務排進佇列,並記下預期執行時間與實際執行時間之間的落差。在高利用率的情況下,即使每個 process 手上只有少量併發請求,也可能出現數百毫秒的排程抖動,極端時甚至長達數秒。他們的應對方式是讓每個 process 只服務少量併發請求,改以大量水平擴充的 Python worker process 來承接負載。

profiling 揪出的兩個具體 bug

第一個出在 feature flag 設定。Statsig 預設每分鐘輪詢一次更新,而且不帶 jitter;設定檔裡卻裝著所有服務的所有 production 規則;再加上架構上每個 pod 最多跑 8 個 Python process。三件事湊在一起,結果就是每分鐘每個 pod 都會出現一個瞬間:所有 worker 一同停下手上的請求,把 CPU 花在解析一份龐大的設定檔。修法本身很簡單:改為部署更小的目標設定、把更新間隔拉長、再加上 jitter。

第二個是連線池與負載平衡互相打架。客戶端連線池可能讓某個送出大量併發請求的 client process 只建立起少數幾條伺服器連線,等於把全部負載傾倒在少數 process 上。在他們調整負載平衡方式之前,服務利用率的離散程度非常大,最尾端的 process 承受的併發請求數,是中位數的 5 到 10 倍。

這些經驗對產品開發者意味著什麼

這是兩部曲的第一篇。OpenAI 表示,大規模多租戶可靠性、讀取效能的分層最佳化策略,以及與 Azure Cosmos DB 的合作如何擴展,都要留到後續文章才會細談。也就是說,這裡讀到的僅是前半段。

可以帶走的判斷有兩點。第一,把儲存邏輯抽成服務的時機,往往不是效能問題,而是協調成本問題——當一次改動要橫跨數十個服務、花上數天,還可能被別人的回滾一筆勾銷,抽象層的價值就浮現了。第二,當你選擇先用一個不擅長高吞吐的語言上線,就必須同步建立起量測能力,否則你連自己欠了多少技術債都不會知道。OpenAI 那兩個每分鐘發作一次的延遲來源,是靠 CPU profiling 找出來的,不是靠猜。

參考來源

AGENTIC COMMONS由 PHLEGON LABS 經營
分享X電郵
支持我們

相關閱讀

  1. Daytona 沙箱接上 OpenAI 電腦操作循環

    Daytona 官方指南示範用 OpenAI ComputerToolset 驅動沙箱桌面,並把每個動作的准駁權留在你的 driver 程式碼裡。

    AI Agents

  2. 把測量點搬進 Challenge Pages:Cloudflare 的網路效能數字是怎麼來的

    Cloudflare 在 2026 Birthday Week 公布最新網路效能:以 TCP handshake 為基準,在千大網路中的 74% 拿下最快。

    Cloudflare

  3. GPT-6 快取改版:把快取命中率從黑箱變成可調參數

    OpenAI 為 GPT-6 推出新快取儀表板、診斷工具與可選控制,讓開發者能主動管理快取命中率與成本。

    OpenAI