ChatGPT 服務超過 10 億人,資料怎麼存?OpenAI Habitat 架構、Python 瓶頸與 Rust 遷移解析

OpenAI 公開支援每週超過 10 億人使用產品的儲存平台 Habitat。本文拆解 7,000 萬 RPS、500 PB、Python 瓶頸與 Rust 遷移。

Share
OpenAI Habitat 線上儲存平台官方主視覺
OpenAI 公開支援 ChatGPT、Codex、API 與內部服務的線上儲存平台 Habitat。 圖片來源:OpenAI 官方工程文章(https://openai.com/index/scaling-storage-one-billion-users-part-one/)。

當你登入 ChatGPT、查看 Codex 設定,或開始一段新對話,畫面背後可能已經進行數十甚至數百次資料查詢。模型回覆得再快,只要其中一筆關鍵資料卡住,使用者感受到的仍然是「ChatGPT 很慢」。

OpenAI 在 2026 年 9 月 11 日首度完整介紹自建的線上儲存平台 Habitat。官方公布,這套系統目前每秒處理超過 7,000 萬次請求,支援每週超過 10 億人使用的產品,橫跨近 40 個地理區域,管理超過 500 PB 資料。

Habitat 不是新的 AI 模型,也不是 ChatGPT 的長期記憶功能。它比較像 OpenAI 產品共用的資料交通中心:產品只要提出需求,Habitat 就負責判斷資料在哪裡、能不能存取、該走哪條路,以及如何避免一個服務拖垮整套系統。

這段工程故事最值得看的,不只是 7,000 萬次請求的規模,而是 OpenAI 如何在高速成長時接受一段「明知不是終點」的 Python 技術債,先把產品穩住,再用 Codex 與 GPT-5.5 協助遷移至 Rust。對正在打造 AI 產品的團隊來說,這比單純比較哪種程式語言最快更有參考價值。

Habitat 是什麼?它不是模型記憶,而是產品的資料交通中心

Habitat 是 OpenAI 自建的 online storage platform,也就是讓線上產品快速讀寫應用資料的平台。它在 2023 年 DevDay 推出 GPTs 時首次上線,最初只是一個連接 ChatGPT 主伺服器與 Azure Cosmos DB 的 Python 程式庫。

產品工程師不必直接處理資料庫的每個細節。當服務送出一筆請求,Habitat 會負責 schema lookup、routing、authorization、encryption、serialization、request shaping 與 connection pooling。

白話來說,它會回答幾個問題:這筆資料是什麼、放在哪個儲存系統、誰有權限讀取、如何加密傳輸,以及一次能送多少請求。底層資源可能是 Azure Cosmos DB、快取、Blob storage,或其他資料服務,但產品端使用的是同一套介面。

這種抽象層的價值,是讓 ChatGPT、Codex、API 與內部服務不必各自重做資料存取能力。不過,OpenAI 這篇文章說明的是系統架構,並沒有公開每一類使用者資料的保存期限、完整欄位或加密實作。因此,不能只靠這篇工程文章推論 ChatGPT 的隱私政策或資料保留方式。

OpenAI 官方 Figure 01,顯示 ChatGPT、API、Codex 與內部服務經 Habitat 連接多種儲存資源
OpenAI 官方 Figure 01。Habitat 位於產品與 Azure Cosmos DB、Nanobase、Valkey、Blob storage 等資源之間。 圖片來源:OpenAI 官方工程文章

每秒 7,000 萬次請求、500 PB 資料,規模到底有多大?

OpenAI 公布的三組數字,分別代表流量、使用規模與資料量。

指標 OpenAI 公布數字 讀者應該怎麼理解
請求量 每秒超過 7,000 萬次 Habitat 是每次產品操作都可能經過的即時系統,不只負責偶爾備份資料
使用規模 每週超過 10 億人 這是 OpenAI 對產品服務規模的描述,不等同付費用戶數
資料量 超過 500 PB 約等於 50 萬 TB,資料必須切分到大量儲存資源中管理
地理範圍 近 40 個區域 系統要同時處理距離、區域故障與資料落地位置
成長速度 連續 3 年每年超過 10 倍 架構不只要能承受大流量,還要追上極快的變化速度

如果把每秒 7,000 萬次請求假設為全天維持同一速度,換算後一天會超過 6 兆次。OpenAI 並未公布實際每日總量,這裡只是協助理解量級的試算。除了買更多伺服器,團隊還得確保每次擴容、更新與故障都不會讓前台產品停擺。

OpenAI 表示,一般系統工程師可能先設計能承受 10 倍成長的架構,再用幾年準備下一次擴充。但 Habitat 過去 3 年每年都成長超過 10 倍,團隊沒有等待「一次到位」的空間,只能一面榨出既有系統的容量,一面替下一代架構爭取時間。

為什麼 Habitat 從 Python 程式庫變成獨立服務?

最初把 Habitat 做成共用程式庫,優點是開發快。產品團隊只要更新套件,就能加入快取、壓縮或加密能力。當使用 Habitat 的服務變多後,這個做法卻產生新的營運風險。

OpenAI 曾想把重要資料分散到多個區域的 Azure Cosmos DB 帳戶,降低單一區域故障的影響。團隊必須先把新的路由邏輯放進每個服務,再逐一部署、進行 shadowing,最後開啟 feature flag。

Shadowing 是把正式請求複製一份給新邏輯測試,但不讓測試結果影響使用者。Feature flag 則是用開關控制新功能何時生效。兩者原本都用來降低風險,問題是幾十個服務的版本很難永遠同步。OpenAI 花了數天協調更新,最後仍有團隊因其他原因回滾到含有舊錯誤的版本,反而造成原本想避免的中斷。

因此,OpenAI 在 2025 年中把 Habitat 從程式庫拆成獨立服務。產品端保留輕量 client SDK,路由、部署、監控與平台功能則集中到 Habitat service。此後只要中央服務更新,所有產品就能一起受益,不必等待每個團隊重新部署。

這項集中化也讓存取控制、稽核紀錄與底層資料庫權限有單一執行點。它能降低版本分裂與權限散落的風險,但也讓 Habitat 成為必須特別保護的關鍵層。中央服務若設計不當,影響範圍同樣會更大,所以集中控制必須搭配隔離、限流與可觀測性,而不是把所有責任塞進同一支程式。

明知 Python 不夠省,OpenAI 為什麼仍先用它?

把 Habitat 變成網路服務後,Python 的成本變得更明顯。原本在應用程式內呼叫函式,現在每筆資料都要經過網路、序列化與獨立服務,CPU、記憶體與延遲都會增加。OpenAI 也知道,Python 的效率無法支撐再成長 100 倍後的需求,日後幾乎一定要重寫。

團隊仍選擇先用 Python,因為當時的優先事項是讓產品團隊能持續開發,並把共用 API、監控與營運方式穩定下來,降低單位成本可以稍後處理。OpenAI 將這稱為策略性承擔技術債。

這個判斷對 MVP 團隊很實際。過早改用效能更高、但團隊不熟悉的語言,可能同時面臨需求還在變、介面尚未穩定與遷移成本過高。先用熟悉工具驗證服務邊界,再在瓶頸有數據時重寫,通常更容易控制風險。

但這個策略成立有前提:團隊必須知道技術債在哪裡、持續量測,並保留替換路徑。若只是以「先做 MVP」為理由,不設定容量門檻與遷移條件,暫時方案很容易變成無限期方案。

Python 真正的瓶頸,不是平均速度,而是最慢的那 1%

一次使用者操作可能引發數百筆資料查詢。即使大部分查詢很快,只要其中一筆特別慢,整個畫面仍得等待。因此,Habitat 最在意的是 tail latency,也就是延遲分布尾端那些最慢的請求。

例如 p99 latency 代表 99% 的請求都比這個時間快,剩下約 1% 更慢。對小型服務來說,1% 似乎不多;但當一個操作串起數百筆查詢,使用者碰到慢請求的機率會被放大。

OpenAI 使用 Python 的 asyncio 同時等待大量網路 I/O。asyncio 是事件迴圈:一個工作等待資料時,CPU 可以先處理另一個工作,但同一執行緒無法同時執行多個 CPU 密集任務。Python 官方文件也提醒,只要某段 CPU 工作阻塞 1 秒,同一事件迴圈上的其他任務與 I/O 都會一起延遲。

Habitat 除了轉送資料,還要處理路由、壓縮、加密、checksum、健康檢查與請求複製。當 CPU 忙碌時,資料庫可能早已回傳結果,負責解析回應的 coroutine 卻還在排隊。OpenAI 量到的排程抖動可達數百毫秒,極端情況甚至達數秒。

團隊限制每個 Python process 的同時請求數,再水平增加大量 process,避免把更多請求塞進單一 process。這提高了資源成本,卻能換取比較穩定的尾端延遲。對使用者而言,穩定地快通常比平均值漂亮、偶爾卡住更重要。

一個每分鐘更新的設定,為什麼會拖慢整個服務?

Habitat 初期曾出現規律的高尾端延遲。CPU profiling 最後找到一個不起眼的原因:feature flag 工具 Statsig 預設每分鐘更新一次設定,而且所有 worker 在相近時間解析包含全公司規則的大型 JSON 檔案。

當時一個 pod 最多執行 8 個 Python process。每逢設定更新,這些 worker 會同時把 CPU 用在解析 JSON,正在處理的使用者請求只能等待。單次工作並不複雜,大量背景任務同時啟動才是問題來源。

OpenAI 的修正很直接:只下發 Habitat 需要的設定、延長更新間隔,並替背景工作加入 jitter。Jitter 是刻意加入少量隨機時間差,避免所有節點同時啟動相同工作。

這個案例提醒產品團隊,排程設成「每分鐘一次」不代表成本平均分散。當數百個服務副本使用相同時鐘,普通背景工作也可能變成週期性的流量尖峰。

連線池的 LIFO,如何讓慢伺服器愈來愈慢?

另一個問題來自 connection pool,也就是重複利用既有網路連線,省去每次重新建立連線的成本。Habitat 使用的 aiohttp 連線池原本採 LIFO,會優先拿回最後放回池中的連線。

在突發流量後,較慢的 server process 會比較晚完成工作,也比較晚歸還連線。LIFO 隨即優先選中這些剛歸還的連線,把新工作再次送到已經較慢的 process。結果形成回饋循環:慢節點收到更多請求,因而變得更慢,即使原始尖峰已經結束也難以恢復。

OpenAI 把連線重用順序改成 FIFO,優先使用較早回到池中的連線,才打破這個循環。部分 process 在修正前承受的同時請求量,曾是平均值的 5 至 10 倍。

這類故障稱為 metastable failure,意思是系統受到一次衝擊後,會被自身的回饋機制困在不健康狀態。問題不一定出在硬體不足,而可能是負載平衡策略把更多工作持續送往最糟的位置。

OpenAI 官方 Figure 04A,顯示 LIFO 可能把新請求送回較慢的 server process
OpenAI 官方 Figure 04A。較慢 process 最晚歸還連線,LIFO 又優先重用它,形成負載集中的回饋循環。 圖片來源:OpenAI 官方工程文章

Process 變多後,OpenAI 又如何避免壓垮資料庫?

大量增加 Python process 解決了事件迴圈壅塞,卻帶來另一個副作用:每個 process 都可能建立自己的連線。部署或重新啟動時,成千上萬條連線一起湧向資料庫與網路設備,便可能形成 thundering herd,也就是「驚群效應」。

OpenAI 因此使用 Envoy 集中連線,將 Python 的 HTTP/1 請求升級為 HTTP/2。HTTP/2 multiplexing 可以讓多筆請求共用同一條連線上的不同 stream,減少底層連線數。Envoy 同時提供限流與 circuit breaker,在下游服務接近極限時阻止更多流量繼續灌入。

這段取捨很重要:水平擴充不是只加 process 或機器。上游每增加一個副本,都可能放大下游資料庫、NAT gateway 與連線池的壓力。若容量規劃只看每秒查詢數,不看連線數、重啟尖峰與失敗重試,系統仍可能在正常部署時出事。

OpenAI 官方 Figure 05,比較 Python process 各自保留連線與 Envoy 共用連線池
OpenAI 官方 Figure 05。Envoy 與 HTTP/2 multiplexing 讓多筆請求共用較少連線,減少下游連線負擔。 圖片來源:OpenAI 官方工程文章

Habitat 為什麼刻意「少做一點」?

Habitat 能持續擴充的另一個原因,是它沒有讓產品團隊任意執行複雜 SQL。平台提供受限制的 NoSQL API,鼓勵簡單、可預測、工作量接近固定的查詢。

過去 OpenAI 的許多線上資料放在 Postgres。團隊規模還小時,可以人工檢查查詢與 schema 變更,避免昂貴的全表掃描進入正式環境。產品與工程師數量增加後,這種審查方式無法跟上,一筆位於熱門路徑的昂貴查詢就可能拖垮資料庫。

Habitat 的限制把成本提前暴露給開發者。複雜 join 或跨圖關係查詢不再是一行看似方便、實際代價難估的指令,產品團隊必須主動拆解工作。這犧牲了開發彈性,換來更容易隔離、限流與水平擴充的線上流量。

需要搜尋或分析複雜關係時,OpenAI 透過 change data capture,簡稱 CDC,把資料變更近即時串流到獨立的 Rockset 環境。CDC 可以理解為持續複製「哪些資料剛剛改變」,讓分析查詢在另一套系統執行,不去搶正式產品讀寫所需的資源。

我的判斷是,這是 Habitat 最值得產品團隊借鏡的設計。平台不必替所有情境提供最強功能,核心路徑更應該優先保證成本可預測,再替少數複雜需求提供隔離的出口。

2 名工程師加上 Codex,如何把 Habitat 遷移到 Rust?

Python 版本最高曾支撐每秒超過 2,000 萬次請求,但 Habitat 後來成為 OpenAI 使用 CPU 核心數第二多的服務,也是 Envoy 使用規模第四大的服務。當 API 與營運模式逐漸成熟,繼續支付 Python 的資源成本已不划算。

OpenAI 表示,2 名工程師在 2026 年第 2 季使用 Codex 與 GPT-5.5,完成整個服務的 Rust 重寫。新版本已處理 95% 正式環境流量,CPU 效率是 Python 版本的 6 倍,記憶體效率則是 15 倍,平均延遲與尾端延遲也明顯下降。

這組結果很亮眼,但不能簡化成「AI 讓 2 個人取代一個重寫團隊」。Habitat 已經有穩定的 API、正式流量、監控資料與多年營運經驗,工程師知道新版本必須維持哪些行為,也能逐步比較新舊系統。Codex 加速的是已有明確規格與驗證標準的遷移,不是憑空決定系統應該怎麼運作。

更值得關注的訊號是,AI Coding Agent 正在改變技術債的還款時機。過去團隊可能因重寫成本過高,被迫長期忍受效率較差的技術棧。當 AI 能協助轉譯、補測試與處理重複工作,團隊就能先用熟悉語言建立產品,再於介面成熟後更早遷移到合適的執行環境。

這個結論仍有失效條件。如果後續缺少可靠測試、行為不相容,或 AI 產生的程式碼增加維護與安全問題,短期重寫速度就不能等同長期成本下降。OpenAI 也尚未在這篇文章公開遷移的測試覆蓋率、總工時或缺陷數,其他團隊不應直接套用「2 人就夠」的人力估算。

對 AI 產品團隊的 4 個實際啟示

1. 先穩定服務邊界,再追求最終效能

Python 並非最佳終點,卻讓 OpenAI 先把 API、部署與監控方式建立起來。若團隊仍在摸索產品需求,先選開發速度快、人才容易取得的工具,通常比一開始追求理論最佳效能更實際。

2. 技術債必須有可觀察的還款條件

Habitat 從 Python 遷移的理由很具體:CPU、記憶體、尾端延遲與成長速度都已跨過團隊設定的成本門檻。MVP 也應先定義何時需要拆服務、換資料庫或重寫,避免用感覺決定大型工程。

3. 平台的好處,常來自限制而不是功能數量

Habitat 不支援任意複雜查詢,表面上較不方便,卻讓每次請求的成本更容易預測。對共用平台而言,防止少數錯誤用法拖垮所有產品,往往比滿足每個團隊的彈性更重要。

4. 導入 Coding Agent 前,先建立可驗證的規格

OpenAI 的 Rust 遷移有舊系統可對照,也有真實流量與效能指標。若團隊只有一句「把系統改快」,AI 只會加速產生更多不確定性。先鎖定 API 相容性、錯誤行為、延遲門檻與回滾方式,Coding Agent 才能把工程速度轉成商業速度。

Habitat 對 ChatGPT 使用者代表什麼?

一般使用者不會直接操作 Habitat,也不會在 ChatGPT 裡看到一個 Habitat 選項。它的影響反映在登入是否成功、設定能否快速載入、對話能不能順利開始,以及區域故障時服務是否仍可用。

這篇文章也說明,AI 產品的體驗不只由模型決定。模型推論、應用資料、權限、網路與下游服務任何一層變慢,最後都會被使用者統稱為「AI 很慢」。因此,OpenAI 的競爭力除了模型能力,也來自能否把龐大資料需求包裝成穩定、可控的基礎設施。

我對 Habitat 的工程方向偏正面。它用受限制的介面換取可預測性,先接受 Python 的短期成本換取產品速度,再於服務邊界成熟後遷移 Rust,整體順序符合高速成長公司的現實。不過,這篇只是兩篇系列的上篇,多租戶隔離、讀取效能與 Azure Cosmos DB 優化仍要等 OpenAI 後續公開,才能完整評估這套架構如何處理資料層的可靠性。

FAQ

Habitat 是 ChatGPT 的記憶功能嗎?

不是。Habitat 是 OpenAI 產品共用的線上資料存取平台,負責路由、權限、加密、快取與連線等工作。ChatGPT 的記憶功能是使用者層的產品能力,兩者不能畫上等號。

OpenAI 的 10 億人是付費用戶嗎?

不是。OpenAI 的原文是 Habitat 支援「每週超過 10 億人使用的產品」,沒有說這些人都是付費用戶,也沒有在這篇文章提供方案別或單一產品功能的拆分。

500 PB 大約是多少資料?

以十進位換算,500 PB 約等於 50 萬 TB。這個數字描述 Habitat 服務的整體資料規模,不代表每位使用者平均占用相同容量。

Python 不適合大型服務嗎?

不能這樣下結論。Python 版本的 Habitat 最高曾支撐每秒超過 2,000 萬次請求,證明它可以服務極大規模。OpenAI 最終改用 Rust,是因為在自身工作負載下,CPU、記憶體與尾端延遲的成本已值得重寫。

Codex 真的讓 2 名工程師完成整套 Rust 重寫嗎?

OpenAI 表示,2 名工程師配合 Codex 與 GPT-5.5,在 2026 年第 2 季完成服務重寫。但原文沒有公開總工時、測試覆蓋率與缺陷數,其他公司不能只拿人數當作專案估算依據。

Habitat 為什麼不用任意 SQL 查詢?

任意 SQL 很有彈性,但某些全表掃描或大型 join 可能耗用難以預測的資源。Habitat 用受限制的 NoSQL API 保持線上請求簡單,再把複雜搜尋與分析分流到獨立系統,降低單一查詢拖垮產品的風險。

結論:真正的規模化,在於知道何時換下一個方案

Habitat 的發展路線重點不在「Rust 勝過 Python」的語言競賽。OpenAI 先用 Python 快速建立共用能力,發現程式庫更新已成為風險後拆成獨立服務,再透過監控逐一處理事件迴圈、背景排程、連線池與下游連線問題。等 API 與營運方式穩定,才用 Codex、GPT-5.5 與 2 名工程師把服務遷移到 Rust。

對多數 AI 團隊來說,最實際的做法也是如此:MVP 階段先選能快速交付的方案,同時量測真正的瓶頸;當成本與可靠性跨過明確門檻,再進行有驗證標準的遷移。技術選擇可以暫時不完美,但演進順序不能只靠運氣。

資料來源