GitHub 近八小時故障點樣由容量盲點滾大,開發團隊要預備咩後路
Tech News

GitHub 近八小時故障點樣由容量盲點滾大,開發團隊要預備咩後路

圖片:via iThome — https://www.ithome.com.tw/news/178335
TechLab 編輯部(譯)·

一次 autoscaling 漏睇指標,連 retry 機制都變成額外負載

GitHub 喺 8 月 17 日遇上一次橫跨多項核心服務嘅故障,由香港時間當晚 9 時 28 分一路拖到翌日朝早 5 時 15 分,合共 7 小時 47 分鐘。官方話 GitHub.com、身份驗證、API、Pull Requests、Issues、Actions 同 Copilot 都受影響;高峰時網頁同 API 錯誤率約 20%,原始檔案及壓縮檔下載錯誤率更去到約 50%。對開發團隊嚟講,呢種半壞狀態往往麻煩過完全斷線:有啲請求成功、有啲失敗,自動化工具就會一路重試,結果更難判斷一個部署究竟做咗幾多。

Autoscaling 有開,但睇錯咗地方

GitHub 官方技術報告顯示,Central US 資料中心喺流量創新高時,負載平衡器網絡開始飽和。最先頂唔順嘅係一個 Istio sidecar pod,佢撞到 concurrency 上限,autoscaling 政策監察緊主服務容量,但冇睇 sidecar 自己仲剩幾多空間。系統以為容量未爆,實際入口已經塞車,故障之後一路擴散,最後有四個 HAProxy 節點用盡 flow limit,連 gateway 身份驗證都慢落嚟。今次出事嘅正正係服務旁邊嗰啲共用元件;平時較少人留意,容量規劃亦容易漏咗佢哋。

內部 retry 隨即令情況惡化。當服務開始延遲,系統用較進取嘅方式重試,原意係捱過短暫錯誤,結果就不停向已經過載嘅負載平衡器加單。GitHub 暫停涉事 HAProxy 後,大部分服務喺 16:36 UTC 左右恢復,Actions 就拖到約 18:03 UTC。呢條時間線反映各項功能共用身份驗證、gateway 同控制層;前台開得返,唔代表 CI/CD 已經可以放心重新開閘。

GitHub 官方圖表顯示近年每月合併 pull request、commit 同新 repo 數量持續上升

圖片:GitHub

Copilot 點解特別遲先恢復

GitHub 將部分流量搬去 Northern Virginia 後,Copilot 又撞中另一個潛伏已久嘅問題。某個內部 endpoint 回應變慢,觸發 VS Code 客戶端 retry bug,將 Copilot Token Service 流量放大約十倍。官方數字顯示,平時每秒約 7,000 至 9,000 個請求,事故期間升到 70,000 至 100,000 個。工程團隊要削減 gateway retry、用負載平衡器回覆 403 截停部分 token 請求,再逐個站點慢慢恢復流量,服務先至喺 21:02 UTC 穩定返。團隊要留意,retry 應該設上限,亦要加入退避同隨機延遲,否則服務恢復期間只會再推高流量。

GitHub 官方圖表顯示 2026 年完成嘅 Actions workflow run 數量上升

圖片:GitHub

增長太快解釋到壓力,解釋唔到盲點

GitHub 話每月 commit 數由今年 4 月嘅 14 億次升到 29 億次,亦已加咗超過 300 萬個 CPU 核心、120PB 高速儲存,同時把約 58% 平台負載及一半 Git 操作搬到 Azure。iThome 報道亦將焦點放喺基建容量追唔上使用量。不過今次唔宜簡化成「機器買得唔夠」:真正引爆點係 scaling policy 漏睇 sidecar 上限,跟住共用身份驗證路徑同 retry 行為再將局部擠塞推到其他服務。GitHub 已話會重新檢查 Istio 上限、regional failover、負載平衡器監察,同統一 retry budget。

有本機 Git clone,都未必開到工

Git 本身係分散式,開發者斷網仍然可以改 code 同 commit;但現代交付流程早已綁埋 pull request、branch protection、Actions、webhook、API、身份驗證、套件同雲端 coding agent。今次官方受影響清單冇單獨列出 GitHub Packages,所以唔應該話佢一定停過;不過團隊如果建置時要即場向 GitHub 拉 action definition、dependency 或 token,任何一段控制層同身份驗證出錯,都足以令條 pipeline 卡住。自設 runner 只係保住執行機器,Actions 控制層出事時一樣未必接到新 job。

降級方案要喺故障前定好

實際做法可以由最常壞嗰幾個接點入手:鎖實 dependency 版本,將關鍵 action、套件同建置工具放入受控 cache 或內部 mirror;保存已簽署、可重新部署嘅 release artifact,避免每次回滾都要重新 build;替緊急修正準備獨立於 GitHub Actions 嘅最小部署路徑,但保留審批同 audit log。涉及 GitHub API 嘅程式亦要識得排隊、退避同熔斷,唔好見 timeout 就無限重試。狀態頁警報之外,最好再用 synthetic check 測試團隊真正依賴嘅 clone、token、package pull 同 workflow dispatch,因為綠色首頁未必代表你條路已經通返。

雲端 coding agent 普及之後,repo、身份驗證、模型入口同 CI 更容易集中喺同一個平台。團隊未必值得為幾個鐘故障即刻搬走全部工具,但至少要寫清楚 GitHub 停一個鐘、四個鐘同一日各自點處理:邊啲工作照排隊、邊啲部署凍結、邊啲修正可以行後備路線。等到下一次 status page 轉紅先即場研究,通常已經太遲。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook