Facebook是如何防止訊息系統在新年前夕發生崩潰?
這是一篇來自IEEE Spectrum的文章,Facebook的Messenger的13億使用者會在新年前夜集中傳送的訊息,比如新年快樂等祝願,這種傳送量比一年中任何其他日子都多得多。
如果一切順利,這些訊息將在不到100毫秒的時間內到達收件人,但是,如果訊息系統服務停止或失敗,位於公司紐約辦事處的一個小型軟體工程師團隊將不得不對其負責。
工程經理Isaac Ahdout和軟體工程師Thomas Georgiou都在該團隊中。他們全年都對應用程式進行了測試和調整,很快就會面臨最大的年度效能考試。Messenger的13億月活躍使用者會在新年前夜傳送的訊息,許多人在各自時區的午夜時間段會使用Messenger中點選按鈕“傳送”問候。
對於在一天或一年中的特定時間看到使用量急劇增加的網路或服務的任何人來說,這是一個熟悉的問題。由於類似的原因,美國電信公司經常在Super Bowls,州博覽會和總統就職典禮之前安裝新的基站。
對於Facebook的Messenger團隊來說,這種挑戰比將一個簡單的訊息從一個使用者直接傳送另一個使用者要稍微複雜一些。Facebook允許人們設定大型群組聊天,並在每次傳送,傳送或閱讀訊息時向發件人顯示結果,意味著必須在跨服務分發的訊息總數。
與平均日相比,使用者在新的一年中傳送和接收的照片和影片的比例也更高。人們經常會嘗試重新傳送似乎沒有立即透過的訊息,這些訊息會堆積更多的請求。
最大的擔心問題是:你如何防止這種級聯故障發生?
一種方法是提前進行廣泛的負載測試,模擬Facebook在新年前夜根據前幾年的活動預期的訊息量。(該公司拒絕分享其預測細節,並且不會說前幾年傳送了多少訊息。)。
例如,在上一個新年前夕,一個資料中心因收到的訊息量而堵塞,因此團隊將流量從該中心轉移到另一箇中心。在此事件發生後,該小組建立了工具,使他們能夠在今年更輕鬆地進行這些變更。
除了轉移負載之外,Messenger團隊還開發了其他槓桿,如果事情變得非常糟糕,它可以採取Pull拉的方式,傳送到伺服器的每條新訊息都作為名為Iris的服務的一部分進入佇列 。在那裡,訊息被分配超時設定,之後該訊息將從佇列中退出以為新訊息騰出空間。在高容量事件期間,這能讓團隊快速丟棄某些型別的訊息,例如讀取收據,以將其資源集中於提供使用者已經點選後組合的訊息。
Iris服務寧願傳送資訊並放棄閱讀回執,而不是丟棄資訊併傳送閱讀回執,這裡面有流量的優先順序設定。
還可以犧牲Messenger應用中表示朋友目前線上的功能,減慢線上情況的更新點頻率可以緩解網路擁塞,或者,團隊可以指示系統暫時延遲某些功能 - 例如刪除有關舊訊息的資訊 - 幾個小時以釋放通常執行該任務的CPU,以便在此刻處理更多訊息。
所有這些選擇都屬於“優雅回退”的概念。不是讓你的服務死亡,以至於沒有人使用它,會讓它變得不那麼棒,但人們仍然可以使用它。
除了這些努力之外,Messenger工程師還花費大量時間在旨在充分利用每臺伺服器內CPU和記憶體的效率專案上。例如,在2018年新年前夕,該團隊新增了一個排程程式,該程式允許系統將類似的訊息“批處理”在一起。伺服器同時收到很多請求,在向下遊傳送請求之前,您可以將其中的一些捆綁在一起。這樣做可以減少下游系統的計算負擔。
基於親和力聚合的原理形成批次一次性傳送訊息,這可以源自各種特徵,如果兩個訊息正在前往同一個接收者,或者需要來自後端的類似資源,則它們可能具有更高的親和力。隨著流量的增加,Messenger團隊可以更積極地擁有系統批處理。這樣做會將延遲(訊息的往返延遲)增加幾毫秒,但更有可能使所有訊息都透過。
相關文章
- 秒殺系統如何保證資料庫不崩潰以及防止商品超賣資料庫
- 系統崩潰了,網站響應慢了,你是如何快速定位錯誤資訊的?網站
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- win10系統崩潰藍屏什麼原因 win10系統出現崩潰藍屏如何修復Win10
- win10 qq視訊崩潰怎麼修復_win10系統qq視訊老是崩潰解決方法Win10
- Qt程式繼承QApplication發生崩潰的原因QT繼承APP
- win10系統用一會就崩潰如何解決Win10
- win10系統崩潰藍色畫面什麼原因 win10系統出現崩潰藍色畫面如何修復Win10
- MQ 如何防止訊息重複入隊MQ
- win10系統firefox多開崩潰怎麼修復_win10 firefox多開總是崩潰解決方法Win10Firefox
- win10系統驅動崩潰怎麼辦_win10系統驅動經常崩潰解決方法Win10
- qq遊戲崩潰w10解決方法_w10系統玩qq遊戲老崩潰如何修復遊戲
- RabbitMQ防止訊息丟失MQ
- 誤升級GLIBC導致系統崩潰之後
- [翻譯]Java排錯指南 - 5 確定崩潰何地發生Java
- WWDC 2018:理解崩潰以及崩潰日誌
- 突發:當機崩潰OOMOOM
- 「Go框架」gin框架是如何做崩潰處理的?Go框架
- win10系統玩gta俠盜獵手老崩潰如何解決Win10
- win10 qq影片崩潰怎麼修復_win10系統qq影片老是崩潰解決方法Win10
- 麒麟系統開發筆記(十一):在國產麒麟系統上使用gdb定位崩潰異常方法流程進階定位代筆記
- TPM是如何幫助企業防止安全事故發生的?
- FMEA是如何幫助企業防止安全事故發生的?
- Android 收集程式崩潰異常資訊Android
- Mac騰訊截圖閃退崩潰Mac
- 益普索:2022年崩潰系統情緒調查
- 微信團隊分享:微信後臺在海量併發請求下是如何做到不崩潰的
- iOS開發的底線-崩潰iOS
- iOS開發-stringByEvaluatingJavaScriptFromString導致崩潰iOSJavaScript
- 360瀏覽器總是崩潰是為什麼 360經常崩潰解決修復方法介紹瀏覽器
- 360瀏覽器總是崩潰是為什麼 360瀏覽器經常崩潰怎麼解決瀏覽器
- “雙十一”大促來襲,四大招防止網站崩潰網站
- APP防崩潰APP
- 崩潰日記
- fastmonkey,xcode10.1,iOS13.5 系統,啟動後崩潰ASTXCodeiOS
- win10專業版系統中360瀏覽器總是崩潰怎麼辦Win10瀏覽器
- 生產級部署 Python 指令碼,崩潰可自啟!Python指令碼
- RocksDB 在 vivo 訊息推送系統中的實踐