由於文件大小突然翻倍,Cloudflare 發生了大規模中斷
Cloudflare 的代理服務有限制,以防止過度內存消耗,因為機器人管理系統“對運行時可以使用的機器學習功能的數量有限制”。這個限制是200,遠高於實際使用的特徵數量。
Prince 寫道,“當將包含 200 多個功能的壞文件部署到我們的服務器時,超出了此限制,導致系統恐慌”和輸出錯誤。
Cloudflare 自 2019 年以來最嚴重的停機
Cloudflare 網絡提供的 5xx 錯誤 HTTP 狀態代碼的數量通常“非常低”,但在壞文件在網絡上傳播後有所增加。 “隨後的峰值和波動表明我們的系統由於加載了不正確的功能文件而發生故障,”普林斯寫道。 “值得注意的是,我們的系統隨後會恢復一段時間。對於內部錯誤來說,這是非常不尋常的行為。”
Prince 寫道,這種不尋常的行為是由於“ClickHouse 數據庫集群上運行的查詢每五分鐘創建一次該文件,該集群逐漸更新以改進權限管理”。 “只有在更新的數據集的一部分上運行查詢時,才會生成不良數據。因此,每五分鐘就有機會生成一組好或壞的配置文件,並在網絡上快速傳播它們。”
這種波動性最初“讓我們相信這可能是由攻擊引起的。最終,每個 ClickHouse 節點都會生成一個錯誤的配置文件,並且在發生故障時波動性會穩定下來,”他寫道。
Prince 表示,Cloudflare“通過停止生成和部署不良功能文件並手動將已知的好文件插入功能文件分發隊列來解決了該問題,然後“強制重新啟動我們的底層代理”。然後,該團隊努力“重新啟動已損壞的其餘服務”,直到 5xx 錯誤代碼的大小在當天晚些時候恢復正常。
Prince 表示此次中斷對 Cloudflare 來說是最嚴重的 2019年以來 該公司正在採取措施,防止未來發生類似的故障。 Prince 表示,Cloudflare 將“以與處理用戶生成的輸入相同的方式增強對 Cloudflare 生成的配置文件的攝取;為功能啟用更多全局終止開關;消除核心轉儲或其他錯誤報告壓垮系統資源的能力;(並)檢查所有核心代理模塊中錯誤情況的故障模式。”
雖然 Prince 無法保證 Cloudflare 永遠不會再經歷同樣程度的中斷,但他表示,之前的中斷“總是會導致建立新的、更具彈性的系統”。