Azure 上的 PostgreSQL 如何撐起 ChatGPT 8 億用戶?微軟工程師親揭幕後秘辛

今天要來聊一個超有料的主題——ChatGPT 背後的資料庫架構,以及微軟工程團隊如何幫 OpenAI 撐過爆炸性的用戶成長。 這篇文章源自微軟官方部落格,由 Azure PostgreSQL 工程副總裁 Affan Dar 領銜撰寫。乾貨滿滿,讓我來幫你翻譯成人話。

先說背景:ChatGPT 有多誇張?

OpenAI 過去一年把資料庫規模擴大了 10 倍,要支撐的是高達 8 億月活躍用戶。這個量級是什麼概念?整個系統底層用的是 Azure Database for PostgreSQL,也就是微軟雲端上的 PostgreSQL 託管服務。 PostgreSQL 這個開源資料庫,平常我們可能覺得它就是個「普通關聯式資料庫」,但這次的故事告訴我們:只要配置得當,它真的可以撐到超大規模。

問題一:讀取副本老是跟不上主節點

什麼是讀取副本(Read Replica)?

簡單說,就是把資料庫「複製一份」給其他伺服器來分擔讀取流量,這樣主節點就不用一個人扛所有查詢。ChatGPT 的架構裡,一台主節點撐著超過 50 個分布在多個地區的副本,這數字已經很嚇人了。

發生了什麼問題?

在 OpenAI 某次大型服務上線前,工程師發現一個詭異現象:副本的資料會「越落越遠」,跟不上主節點的更新速度(這叫做 Replication Lag,複製延遲),而且它不會自己恢復,只能靠重啟副本才能解決,然後一天內又再次發生——陷入一個惡性循環。

問題的根源是什麼?

深挖之後,找到了罪魁禍首:TCP 壅塞控制演算法。 預設的 CUBIC 演算法在偵測到封包遺失(跨地區傳輸本來就難免)時,會把傳輸速度猛踩煞車,拼命退讓,導致複製速度大幅下降。

怎麼解決?

微軟團隊做了三件事:

  • 把壅塞控制演算法從 CUBIC 換成 BBR(對封包遺失更不敏感)
  • 調整 TCP 視窗大小設定
  • 引入**公平佇列(Fair Queuing)**網路排程,讓封包傳送更平滑 這三招組合拳下去,問題就解決了。

問題二:讀副本超過 50 個後怎麼辦?

微軟加入了**串聯副本(Cascading Replica)**支援,讓副本可以再複製給下一層副本,不用所有副本都直接連主節點。這樣就能在不影響主節點的情況下,繼續橫向擴展讀取能力。 此外,他們還開發了一個新技巧:從同地區的另一個副本快照建立新的異地副本,避免過去需要跨地區大量複製資料(可能要花幾小時甚至幾天)的痛苦。

問題三:寫入量太大,單台主節點 IOPS 不夠了

讀取問題解決了,但寫入量的成長讓單台 PostgreSQL 主節點的 I/O 效能上限捉襟見肘。這也是為什麼 OpenAI 後來把部分適合拆分的新工作負載移到 Azure Cosmos DB(NoSQL)去了。 但問題是,有些資料就是很難拆分(sharding 困難),這時候怎麼辦? 這就帶出了微軟的新架構:Azure HorizonDB,在 2025 年 11 月進入私人預覽。

Azure HorizonDB:為超大規模打造的 Postgres

這是目前最令人興奮的部分。HorizonDB 從根本上重新設計了 PostgreSQL 的儲存層,核心概念叫做「以 WAL 為中心的儲存模型」。

WAL 是什麼?

WAL(Write-Ahead Log,預寫日誌)是資料庫記錄「我要做什麼改變」的日誌,用來確保資料不會因為系統崩潰而遺失。PostgreSQL 傳統上是先寫 WAL、再把資料頁寫到磁碟。

HorizonDB 的創新在哪?

PostgreSQL 的計算節點不再直接寫資料頁到磁碟,所有持久化都透過 WAL 完成,資料頁由獨立的儲存層負責重建。 儲存層分成兩個獨立服務:

服務 優化目標
WAL Server 超低延遲的順序寫入
Page Server 超大規模的隨機讀寫
WAL Server 可以在一次網路跳轉內就把一筆交易持久化到 3 個可用區域(傳統架構需要 4 次跳轉),大幅降低提交延遲。
Page Server 則把資料分散在大量 NVMe 高速磁碟上,讓單個 PostgreSQL 實例可以達到數十萬 IOPS 的讀取能力。

計算節點變成無狀態引擎

最妙的是,這個架構讓 PostgreSQL 的計算節點從此「輕裝上陣」——備份、複製、Checkpoint 等繁重工作全部交給儲存層,計算節點只需要專心處理業務邏輯,CPU、磁碟、網路資源都省下來了。 讀取副本也不再需要各自保存一份完整的資料拷貝,瞬間就能建立新副本,且每多一個副本完全不影響主節點效能。

總結:從這件事可以學到什麼?

這篇文章最有價值的地方,不只是技術細節,而是工程師解決問題的思路: 先找根本原因,而不是用重啟來掩蓋問題(TCP 壅塞控制的案例)。一步一步拆解問題,先解讀取延遲、再解讀取擴展、最後解寫入擴展。為未來設計,HorizonDB 的架構不是為了應付今天的問題,而是為了更大的明天。 PostgreSQL 在 8 億用戶的規模下能正常運行,背後是無數工程師的調校與創新。下次有人說「PostgreSQL 不能水平擴展」,你可以把這篇故事講給他聽。

原文來源:Microsoft Community Hub — Supporting ChatGPT on PostgreSQL in Azure(2026/1/29)

注意!Claude Code Windows 路徑大搬家,3 月 12 日前務必完成設定

Anthropic 最近發出了一封重要通知:Windows 版的 Claude Code 正在進行一項「設定檔路徑遷移」,而且有明確的截止日期——2026 年 3 月 12 日。如果你的公司或 IT 部門有在幫員工統一部署 Claude Code 的設定,那這件事你非得知道不可。

這次更新到底在改什麼?

簡單來說,就是 Claude Code 在 Windows 上存放「企業管理設定檔」的資料夾位置換了。 這個設定檔叫做 managed-settings.json,是企業 IT 團隊用來統一管理、控制 Claude Code 行為的重要檔案。

  • 舊路徑(即將停用): C:\\ProgramData\\ClaudeCode\\
  • 新路徑(請更新到這裡): C:\\Program Files\\ClaudeCode\\managed-settings.json 3 月 12 日之後,系統就不會再去讀取舊路徑的檔案了。也就是說,如果你的 IT 部門沒有在期限前更新部署位置,之前設定的企業管理規則就會全部失效!

誰需要採取行動?

並不是所有人都需要動作。 這件事主要影響的是:

  • 公司有 IT 部門負責集中管理 Claude Code 設定的企業用戶
  • 使用 MDM(行動裝置管理)或端點管理工具(例如 Intune、Jamf 等)來部署 managed-settings.json 的組織 如果你只是個人用戶,或是公司根本沒有部署這個設定檔,那這次更新對你沒有任何影響,不用緊張。

IT 同仁需要怎麼做?

步驟其實很簡單,就一件事:

在 2026 年 3 月 12 日之前,將你的 MDM 或端點管理工具的部署路徑,更新為新的路徑: C:\\Program Files\\ClaudeCode\\managed-settings.json 如果你已經完成了這個更新,那就什麼都不用再做了,大功告成!


小結

這次的改動說複雜不複雜,說簡單也要注意別錯過截止日期。如果你負責公司的 IT 管理,記得趕快去確認部署設定有沒有更新;如果你只是一般使用者,把這篇文章轉給你的 IT 同事就對了! 總之,3 月 12 日這個日期記起來,別讓企業設定白白失效了。

資料來源:Anthropic 官方通知信件

Antoropic claude 5x 跟 20x 方案差別?到底那個划算?有工程師算出來了!!

原文: https://she-llac.com/claude-limits故事是這樣開始的……

話說有個工程師,平常就是那種會把什麼都拆開來看的人。他在用 Claude 的時候心裡一直有個疑問:

「Anthropic 說 Max 20× 方案有 20 倍用量,但……20 倍是哪個 20 倍啊?」

於是他開始挖。沒想到,他在 API 的回應資料裡發現了一個「忘記四捨五入」的小數:

0.16327272727272726

一般人看到這個數字:「哦,好像是 16% 左右。」

這位工程師看到這個數字:「等等,這個數字精確得有點可疑……」

然後他就把 Claude 的整個內部計費系統給挖出來了。就這樣。


先說結論:誰才是真正划算的方案?

作者把幾個方案的「實際用量」給算清楚了,結果讓人頗為傻眼:

每 5 小時的用量上限

方案 官方說幾倍 實際幾倍
Pro 基準 基準
Max 5× 5 倍 實際 6 倍!
Max 20× 20 倍 20 倍(這次沒騙人)

每週的用量上限

方案 官方說幾倍 實際幾倍
Pro 基準 基準
Max 5× 5 倍 實際 8.33 倍!
Max 20× 20 倍 實際只有 16.67 倍…

看到了嗎?Max 5× 根本是在送福利,每週用量比官方宣稱的多了超過六成!

反觀 Max 20× 就比較尷尬了——每 5 小時確實給你 20 倍,但每週的總量上限,說好的 20 倍,實際只有 16.67 倍。更糟的是,Max 20× 每週能做的事,也只有 Max 5× 的兩倍,但價格卻是兩倍。所以 CP 值根本沒有更好。

結論:Max 5× 才是甜蜜點,Max 20× 的星號(*)是有原因的。


跟直接用 API 比呢?

好,那如果你是開發者,直接用 Anthropic 的 API 付錢,跟買訂閱方案比起來差多少?

方案 你付多少 等於 API 費用多少 賺了幾倍
Pro $20/月 $163/月 賺 8 倍
Max 5× $100/月 $1,354/月 賺 13.5 倍
Max 20× $200/月 $2,708/月 賺 13.5 倍

也就是說,你花 100 塊買 Max 5×,等於在 API 上用了 1,354 塊的量。

這還只是「保守估計」。因為有個東西叫做快取(Cache)

  • 你和 Claude 聊天時,之前說過的話會被暫存起來(快取)。

  • 下次 Claude 回答時,可以直接讀取快取,不用重新處理。

  • 用 API 的話:讀快取也要付費(收正常費用的 10%)。

  • 用訂閱方案的話:讀快取完全免費!

如果你在用 Claude Code(讓 Claude 自動幫你寫程式、改程式),每次它呼叫工具、做操作,都會重複讀取大量快取。這種情況下,訂閱方案的實際效益可以高達 API 費用的 36.7 倍

三十六點七倍。你沒看錯。


他到底是怎麼挖出這些數字的?

這才是文章最有趣的部分,來聽工程師辦案過程:

第一步:發現可疑現場

作者做了個 Chrome 擴充套件,方便自己查看 Claude 的使用量。在研究過程中,他發現 Claude 在生成回應時,會在背景偷偷傳一個數字給瀏覽器,代表「你已經用掉的比例」,長這樣:

 0.16327272727272726

一個正常工程師會把這個數字四捨五入,顯示成「16%」就好了。但 Anthropic 的工程師忘了這樣做,把原始數字直接送出來了。

而這個原始數字,其實是:你用掉的量 ÷ 總上限

第二步:用數學魔法還原分數

這個小數點背後,藏的是一個分數。比如 0.5 背後是 1/20.333... 背後是 1/3

0.16327272727272726 背後是什麼?

作者用了一個叫做 Stern-Brocot 樹 的數學演算法。這個方法就像在玩「猜數字」遊戲,但它特別聰明——它會優先猜「簡單」的分數,因為電腦系統內部用的數字通常都是整數,分母不會是天文數字。

這個演算法跑了幾十步之後,找到了答案:

449 / 2750

驗算:449 ÷ 2750 = 0.16327272727272726 ✓ 完美吻合!

第三步:收集更多證據,確認總上限

分母 2750 是什麼意思?就是那個時間點的「總上限比例分母」,但因為分數會被化簡,不一定是真正的上限。

所以作者在不同的使用量下,重複採樣了很多次,對所有還原出的分母取最小公倍數(LCM)

當這個最小公倍數不再增加的時候,答案就出現了:3,300,000

這就是 Max 5× 方案每 5 小時的真實 Credits 上限。

第四步:搞清楚「Credits 是什麼」

知道了上限之後,還要知道「每次對話到底會消耗多少 Credits」。這部分作者就靠老派方法了:大量手動測試、記錄數據、列表格、盯著看、問 Claude、問 GPT、提假設、驗證假設……

最後他得出了這個公式:

 消耗的 Credits = 無條件進位(輸入 Token × 輸入費率 + 輸出 Token × 輸出費率)

費率的部分,跟 API 定價的比例完全一致:Opus 最貴、Haiku 最便宜,輸出 Token 是輸入的 5 倍。


這件事告訴我們什麼?

對使用者的啟示:

  • 能買訂閱方案就買,CP 值遠勝 API。

  • Max 5× 是最划算的選擇,Max 20× 沒有成比例地更好。

  • 如果你在跑 AI 代理程式(像 Claude Code),省下的快取費用更是驚人。

對工程師的啟示:

  • 側通道洩漏(Side Channel Leak)真的無所不在。Anthropic 只是忘了把兩個數字四捨五入,結果被人把整個計費架構給挖出來了。

  • 這不是駭客攻擊,不需要入侵任何系統,只需要一點數學和一點好奇心。


最後

作者在文章結尾說了一句話,頗有意思:

「截至撰文時,那兩個浮點數還沒有被四捨五入。我猜如果這篇文章引起足夠的關注,這種情況可能不會持續太久。到時候我會有點難過,因為這樣我的擴充套件就沒辦法那麼精準了。」

翻譯成白話就是:「我剛剛把 Anthropic 的底細公開在網路上,我猜他們很快就會把漏洞補起來,然後我的工具就沒這麼好用了。但這篇文章我還是要發。」

工程師的浪漫,大概就是這樣吧。

解決 Vite 專案中 ngrok 連線失敗的「安全門檻」

最近有團隊成員在進行外部對接調試時,反應使用 ngrok 進行內網穿透時,遇到了連線被阻擋的問題。這其實不是 ngrok 的服務異常,而是 Vite 在升級到新版本後,為了防禦 DNS Rebinding(DNS 再綁定攻擊) 所加強的安全檢查機制。

🛠️ 解決方案

如果你的 ngrok 網址顯示攔截,請直接檢查你的 vite.config.ts。你必須顯式地將 ngrok 提供的 domain 加入「允許名單」中:

TypeScript

// vite.config.ts
export default defineConfig({
  server: {
    allowedHosts: [
      'a134-211-72-118-118.ngrok-free.app' // 替換為你當前的 ngrok 網址
    ]
  }
})

 為什麼我們要關注這個設定?

公司治理資安維護的角度來看,這項調整背後有兩個關鍵思考:

  1. 防止 Host Header 攻擊:Vite 預設不再信任隨機的 Host 請求。這能有效避免惡意網站利用瀏覽器漏洞,在使用者不知情的狀況下,與本地開發環境通訊並竊取原始碼或環境變數。

  2. 開發環境的最小權限原則:雖然 ngrok 方便,但隨意開放外部存取內網環境是有風險的。透過 allowedHosts 的明確宣告,我們能確保開發者清楚知道哪些外部網域正在與本地服務互動。

📢技術小提醒

在測試結束後,記得將該設定移除或將其移至 .env 進行管理,切勿將特定 ngrok 網址永久硬編碼在 code 中並推上主分支,保持乾淨且安全的 Repo 是每一位資深工程師的素養。

祝大家今天開發順利,Bug 自由!

#Vite #ngrok #FrontendDevelopment #資安意識 #DNSRebinding #軟體研發管理 #WebSecurity #TypeScript