如果 Cloudflare 不使用 Rust,就不會當機了,是這樣嗎?我看未必

更新 發佈閱讀 8 分鐘
本文同步刊載於筆者個人網站:https://hhming.moe/post/cloudflare-outage-20251118-and-rust/

在半個月前,我才剛開玩笑的和一位大神說:「在 Rust 裡面你偷懶,edge case 就會用 panic 懲罰你」,沒想到半個月後居然就親身碰上了。

台灣時間 2025 年 11 月 18 日晚上 7 點初(官方紀錄為 5 分)開始,許多網站開始陸續出現 Cloudflare 機器人驗證失敗,網站回應緩慢,最後甚至出現了根本無法存取的情況。剛好當時我也因此受害(網站機器人檢查瘋狂轉圈圈)所以對時間點特別有印象。新聞也動的很快,看來臺灣 Yahoo! 沒有用到 Cloudflare 的第二代核心代理(FL 2):https://tw.news.yahoo.com/share/ac41d1e8-9bb2-4fcd-9aa1-5d1e422abe65

那隔天起床,事件已經解決,之後官方也發布事件報告,事情乍看是要告一段落了。不過我看到不僅是 reddit 的 progammerHumor 上出現嘲諷 Rust 的貼文:https://redd.it/1p0zjw4https://redd.it/1p0xgfp ,甚至在一些非程式設計方面的社群也看到有人轉貼類似的言論,都是把這次當機原因推到 Rust 身上(不過 reddit 上也有不少類似「既然 Cloudflare 都在生產環境上使用 unwrap() 了,我也就不擔心我的 Rust 程式碼了。」等的搞笑留言,害我不小心笑了),因此讓我覺得有必要寫篇文刷刷存在感,告訴大家這次真的不是 Rust 的問題。

事件簡易說明

官方部落格原文:https://blog.cloudflare.com/18-november-2025-outage/

話說第一時間其實只有英文和簡體中文,我是看英文的,沒想到今天看居然出現繁體中文,也一併附上給大家參考:https://blog.cloudflare.com/zh-tw/18-november-2025-outage/

背景說明

  • Cloudflare 是 CDN、WAF 等的中間角色,也就是在 client 和 server 之間的「傳話兼審核員」
  • Cloudflare 有個 Bot Management,檢查流量是否為機器人,判斷依據「特徵」,可以想像成防毒軟體的病毒定義檔,CF 會依照特徵去檢測流量決定一個機器人分數(bot scores)決定是否放行流量。
  • Bot Management 特徵更新頻率約為幾分鐘

    This feature file is refreshed every few minutes

  • Cloudflare 為了效能考量,預設特徵檔案大小不會大幅變動,因此預先分配記憶體位置(memory preallocation)。
  • Cloudflare 的 core proxy──Frontline,簡稱 FL,使用 Nginx、LuaJIT(早期還有 PHP)實作;第二代稱為 FL2,使用 Rust 實作。

outage

  1. 更新特徵的系統帳號權限變更,原本只能看到 default 的系統帳號,現在可以看到其他的資料庫(r0
  2. 權限變更完成,select 的資料至少翻倍(default + r0
  3. 加上前述背景說明的預先記憶體分配,翻倍的特徵資料超出上限放不進預先分配好的記憶體位置,但程式設計師直接 unwrap() 所以 Rust 恐慌(panic)
thread fl2_worker_thread panicked: called Result::unwrap() on an Err value

個人觀點

Rust 相當重視早期揪錯,才會用各種方式強迫程式設計師進行各種處理。以這次的案例來說,append_with_names() 會回傳 Result,其中有兩種可能:Ok()Err(),分別代表成功和失敗兩種情況。Rust 會強迫程式設計師必須分別處理兩種情況,否則無法編譯。聽起來很棒,那為什麼這次還會爆炸?原因在於人都是懶惰的……不是,我是說編譯器保留彈性,畢竟有時有可能你可以保證絕對不會出錯,何必浪費時間去處理不存在的 Err()?因此有一個方法──也是本次主角──就是 unwrap()。這個方法想必學過 Rust 的人 100% 都用過,因為大家都想偷懶。其用途在於,如果 ResultOk(T),則回傳 Ok() 中的值 T;如果是 Err(),則引發 panic。

看出來了嗎?整個事件的問題點就在於,程式設計師太過相信內部服務不會捅你一刀,殊不知凡事都有意外(就像交往多年的女友某天突然說要分手一樣)。這次好死不死改個權限,誰也沒想到會導致查詢出來的資料翻倍(或是剛好沒檢查到)然後導致超出預先分配好的記憶體空間,加上前面說得太相信同事,結果就爆了。就算今天你換成其他程式語言結果也是壞的,做好例外處理才是整件事最大的重點(整合測試可能也能揪出問題)用什麼程式語言根本不重要。

Rust 社群我也有看到幾個關於這次事件不同的解決方案,像是「分配失敗就跳過這次更新」、「截斷多餘的特徵檔案部分」、使用 ? 或是 Anyhow 包一層等等。那因為我比較菜,問我的話可能是會使用正統 match 然後在錯誤區塊 log 或 alert 的方式:

// 示意用簡化版
match (feature_values.append_with_names(/* param */)) {
Ok(fv) => fv,
Err(e) => {
// log
// send alert
// skip
}
}

我在一般人的社群中看到有人轉發的觀點說,第一代不受影響,因為 failing gracefully,不要使用 Rust 就沒事了。的確,如果慈悲失敗今天 Cloudflare 就不會服務中斷,只是流量的機器人分數都是 0 分而已(實際上這就是第一代 FL 當時的情況)。

聽起來很合理對吧?但實際上問題點根本不在 Rust 或是預先分配記憶體。想像一下如果今天這個元件是自動駕駛的煞車系統,分數是代表需要剎車的可能或力道,你的慈悲失敗會導致多少人死傷?

不是不能 failing gracefully,而是要看情況。《The Rust Programming Language》有一個章節在告訴你,什麼時候要讓程式 panic,什麼時候不該。有興趣的人可以移步 Rust 台灣社群對此書貢獻的正體中文翻譯版:https://rust-lang.tw/book-tw/ch09-03-to-panic-or-not-to-panic.html

最後,即便是程式設計師也是人,人都無法避免犯錯。雖然這起事件我認為程式設計師責無旁貸,但最重要的還是要從事件中記取教訓。Cloudflare 重大障礙發生後都會有詳細說明,甚至還會有程式碼。這次事件也一如既往地貼出出錯的部分,讓我們可以從中一起學習。

啊,這次是真的最後了,我英文很爛,也沒有對 Rust 特別熟練,只是基本的看得懂而已。如果這次事件分析或 Rust 部分有錯誤懇請各方斧正,或是你有更好的方法也歡迎分享給大家。希望不管你是寫什麼程式語言,都要好好的處理例外和做該做的 log,至少出事的時候可以更快定位問題並處理(已經不知道被搞多少次了哀)。

留言
avatar-img
hms5232的沙龍
5會員
25內容數
hms5232的沙龍的其他內容
2025/09/21
Framework 是一家主打可以自行升級、維修,宗旨是盡可能延長筆電壽命的模組化筆電廠商。本文會分享一些網路上開箱或分享比較沒有提及的事情,希望這篇分享文能讓更多人認識這間廠商,也能幫助到猶豫不決的人。
Thumbnail
2025/09/21
Framework 是一家主打可以自行升級、維修,宗旨是盡可能延長筆電壽命的模組化筆電廠商。本文會分享一些網路上開箱或分享比較沒有提及的事情,希望這篇分享文能讓更多人認識這間廠商,也能幫助到猶豫不決的人。
Thumbnail
2025/08/10
本文分享了作者在日本北海道成功申請記名Kitaca卡的經驗,並說明外國人可以申請,流程快速且便利,重點強調申請時需仔細確認英文姓名拼音的正確性,避免錯誤。文章也提及了作者在資訊搜尋過程中的困惑與解決方法,並包含個人網站連結,方便讀者參考更多旅遊資訊。
Thumbnail
2025/08/10
本文分享了作者在日本北海道成功申請記名Kitaca卡的經驗,並說明外國人可以申請,流程快速且便利,重點強調申請時需仔細確認英文姓名拼音的正確性,避免錯誤。文章也提及了作者在資訊搜尋過程中的困惑與解決方法,並包含個人網站連結,方便讀者參考更多旅遊資訊。
Thumbnail
2025/04/03
輕小說式標題,看標題就看完整篇文。重點就是標題說的,有興趣聽廢話再點進來吧。
Thumbnail
2025/04/03
輕小說式標題,看標題就看完整篇文。重點就是標題說的,有興趣聽廢話再點進來吧。
Thumbnail
看更多
你可能也想看
Thumbnail
Cloudflare是一家全球網路服務公司,提供安全、高效且穩定的網路環境。其營收主要來自訂閱服務,付費客戶數持續增長,大型客戶貢獻比例越來越高。2025年Q1營收同比增長27%,達到4.791億美元,表現強勁。Cloudflare在AI相關服務方面也看到強勁增長,並看好AI Agent的發展潛力。
Thumbnail
Cloudflare是一家全球網路服務公司,提供安全、高效且穩定的網路環境。其營收主要來自訂閱服務,付費客戶數持續增長,大型客戶貢獻比例越來越高。2025年Q1營收同比增長27%,達到4.791億美元,表現強勁。Cloudflare在AI相關服務方面也看到強勁增長,並看好AI Agent的發展潛力。
Thumbnail
Cloudflare 全球性故障引爆 X、ChatGPT、普發一萬網站、麥當勞 LINE 點餐頁等全面當機,為什麼一家公司的問題可以讓整個網路世界同步斷電? Cloudflare 不只是便宜,它是全球網站最常用的「雲端防火牆+CDN加速器+反向代理」。免費就能提供 SSL、DDoS 防護與快取
Thumbnail
Cloudflare 全球性故障引爆 X、ChatGPT、普發一萬網站、麥當勞 LINE 點餐頁等全面當機,為什麼一家公司的問題可以讓整個網路世界同步斷電? Cloudflare 不只是便宜,它是全球網站最常用的「雲端防火牆+CDN加速器+反向代理」。免費就能提供 SSL、DDoS 防護與快取
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
Cloudflare(NET)作為全球領先的雲端平臺,憑藉其獨特的無伺服器架構、全球邊緣網路以及全方位安全與開發平臺解決方案,不僅鞏固了其在網路安全和性能加速領域的地位,更積極佈局AI,成為企業部署生成式AI模型與應用的關鍵夥伴。本文深入剖析Cloudflare的商業模式、最新的財報亮點與未來展望。
Thumbnail
Cloudflare(NET)作為全球領先的雲端平臺,憑藉其獨特的無伺服器架構、全球邊緣網路以及全方位安全與開發平臺解決方案,不僅鞏固了其在網路安全和性能加速領域的地位,更積極佈局AI,成為企業部署生成式AI模型與應用的關鍵夥伴。本文深入剖析Cloudflare的商業模式、最新的財報亮點與未來展望。
Thumbnail
Cloudflare 的新功能允許網站針對 AI 爬蟲按次計費,徹底改變網路世界的金流模式。此功能讓網站可以將其有價值的內容 (例如:教學文章、成功案例、內部 SOP 等) 變現,創造額外營收。此舉改變內容變現邏輯,讓資料授權成為新的獲利模式,也將影響 SaaS 公司估值方式及知識價值,為內容創作者
Thumbnail
Cloudflare 的新功能允許網站針對 AI 爬蟲按次計費,徹底改變網路世界的金流模式。此功能讓網站可以將其有價值的內容 (例如:教學文章、成功案例、內部 SOP 等) 變現,創造額外營收。此舉改變內容變現邏輯,讓資料授權成為新的獲利模式,也將影響 SaaS 公司估值方式及知識價值,為內容創作者
Thumbnail
Cloudflare網站SSL簡單說就是HTTPS://XXXX網站名稱 首先要先購買,例如:cloudflare的設定  步驟一:上面點"規則"後設定如下照著官網設定 步驟二:上面點"DNS"後設定如下 步驟三:上面點SSL設定如下,按創建証書後,大致完成,再到你的網站設定HTTPS://DNS。
Thumbnail
Cloudflare網站SSL簡單說就是HTTPS://XXXX網站名稱 首先要先購買,例如:cloudflare的設定  步驟一:上面點"規則"後設定如下照著官網設定 步驟二:上面點"DNS"後設定如下 步驟三:上面點SSL設定如下,按創建証書後,大致完成,再到你的網站設定HTTPS://DNS。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
了解如何使用 Cloudflare Workers AI 與 Whisper 建立免費開源的語音辨識功能。本文詳細說明註冊步驟、部署流程及程式碼修改,讓你輕鬆將語音轉換成文字。
Thumbnail
了解如何使用 Cloudflare Workers AI 與 Whisper 建立免費開源的語音辨識功能。本文詳細說明註冊步驟、部署流程及程式碼修改,讓你輕鬆將語音轉換成文字。
Thumbnail
AI 帶來的衝擊正在快速擴散:Cloudflare CEO 警告「答案引擎」正掏空媒體與知識流量,資訊恐被少數科技巨頭壟斷;日本石黑浩則預言 5 年內仿生機器人將走進家庭,重塑人機共生的日常;Replit CEO 更直言「SaaS 已死」,AI 代理人將讓軟體開發成本趨近於零,徹底改寫產業遊戲規則。
Thumbnail
AI 帶來的衝擊正在快速擴散:Cloudflare CEO 警告「答案引擎」正掏空媒體與知識流量,資訊恐被少數科技巨頭壟斷;日本石黑浩則預言 5 年內仿生機器人將走進家庭,重塑人機共生的日常;Replit CEO 更直言「SaaS 已死」,AI 代理人將讓軟體開發成本趨近於零,徹底改寫產業遊戲規則。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News