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團隊可以更積極地擁有系統批處理。這樣做會將延遲(訊息的往返延遲)增加幾毫秒,但更有可能使所有訊息都透過。
相關文章
- 秒殺系統如何保證資料庫不崩潰以及防止商品超賣資料庫
- 如何挽救崩潰的WindowsXP作業系統Windows作業系統
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- win10 qq視訊崩潰怎麼修復_win10系統qq視訊老是崩潰解決方法Win10
- win10系統崩潰藍屏什麼原因 win10系統出現崩潰藍屏如何修復Win10
- MQ 如何防止訊息重複入隊MQ
- 系統崩潰了,網站響應慢了,你是如何快速定位錯誤資訊的?網站
- Qt程式繼承QApplication發生崩潰的原因QT繼承APP
- qq遊戲崩潰w10解決方法_w10系統玩qq遊戲老崩潰如何修復遊戲
- win10系統用一會就崩潰如何解決Win10
- WkWebView 令人崩潰的崩潰WebView
- win10系統崩潰藍色畫面什麼原因 win10系統出現崩潰藍色畫面如何修復Win10
- RabbitMQ防止訊息丟失MQ
- win10系統驅動崩潰怎麼辦_win10系統驅動經常崩潰解決方法Win10
- 微信團隊分享:微信後臺在海量併發請求下是如何做到不崩潰的
- [翻譯]Java排錯指南 - 5 確定崩潰何地發生Java
- Win10系統執行lol英雄聯盟崩潰如何解決Win10
- win10系統firefox多開崩潰怎麼修復_win10 firefox多開總是崩潰解決方法Win10Firefox
- 突發:當機崩潰OOMOOM
- 「Go框架」gin框架是如何做崩潰處理的?Go框架
- hp-unix 殭屍程式導致系統崩潰
- WKWebView崩潰WebView
- Redis崩潰Redis
- 麒麟系統開發筆記(十一):在國產麒麟系統上使用gdb定位崩潰異常方法流程進階定位代筆記
- win10系統玩gta俠盜獵手老崩潰如何解決Win10
- Win10玩刺客信條英靈殿崩潰怎麼回事 win10系統玩刺客信條英靈殿遊戲崩潰如何修復Win10遊戲
- 線上訊息佇列發生積壓,如何快速解決?佇列
- win10 qq影片崩潰怎麼修復_win10系統qq影片老是崩潰解決方法Win10
- iOS開發的底線-崩潰iOS
- 新年第一節:還是系統異常
- 誤升級GLIBC導致系統崩潰之後
- iOS系統app崩潰日誌手動符號化iOSAPP符號
- 華為手機6.0系統系列崩潰,情況未明
- Crittercism:KitKat崩潰率0.7% iOS 7.1崩潰率1.6%iOS
- 360瀏覽器總是崩潰是為什麼 360瀏覽器經常崩潰怎麼解決瀏覽器
- 360瀏覽器總是崩潰是為什麼 360經常崩潰解決修復方法介紹瀏覽器
- RocksDB 在 vivo 訊息推送系統中的實踐
- APP防崩潰APP