由於早期設計的臉書Messenger架構已經開始不敷使用,而且也難以擴增新功能,因此臉書決定將Messenger的資料庫從基於HDFS的開源分散式資料庫HBase,轉移到自家的開源資料庫MyRocks,而且為了讓系統轉移的過程不影響用戶的正常使用,特地規畫了兩套搬移流程,在兩周的時間完成99.9%的帳戶遷移,新系統帶來的先進壓縮方法讓儲存量減少90%,在使用快閃儲存系統後讀取延遲更是比過去少了50倍。

Messenger的用戶現在高達10億人,透過Messenger即時的分享文字、照片與影片等,但隨著服務發展與擴增新功能,臉書發現是時候改變支援Messenger的基礎架構了。臉書提到,最初Messenger被設計成類似電子郵件的功能,用戶會在登入臉書網站時,看到在收件箱的訊息,但是現在的Messenger已經不一樣了,被發展成了即時通訊系統,臉書為Messenger這一路的轉變,更新了許多後端系統,並把原本單一的整體服務拆開成不同獨立的系統,以支援行動優先的服務。

現在臉書還要對Messenger的儲存基礎架構進行大翻修,除了要提供更快更可靠的儲存服務外,還要方便未來擴充新功能。這次的更新主要有三部分,第一是重新設計並簡化資料格式。第二是將原本使用基於HDFS的開源分散式資料庫HBase,轉移到由臉書開發的開源資料庫MyRocks上,而這是臉書耕耘許久將RocksDB資料庫引擎整合進MySQL的開源專案。第三則是將儲存裝置從傳統硬碟轉移到快閃儲存上。

為了確保在資料庫轉移時不影響所有用戶的使用經驗,臉書為搬移過程設計了兩套流程,區分為一般搬移以及緩衝搬移。一般搬移針對一般的單一使用者帳號,這個搬移的成立條件需要在搬移的過程沒有資料寫入帳戶中,因此臉書為此定義了狀態機,帳戶在任何時間都會處於未搬移、雙重寫入或是已完成的狀態。搬移工作開始時,會先儲存一個舊系統最後一筆資料的位置,接著將資料搬到新系統中,完成資料複製後檢查舊系統資料有無增加,沒有增加就讓未來新流量寫進新系統中,並進入雙重寫入狀態。假如在搬移的過程,仍有資料寫進舊資料庫,搬移系統便會將該帳號標記為失敗,清除MyRocks中的資料,待下次再次進行搬移工作直到成功。

高流量帳號則無法使用一般的搬移流程,因為會不停的遭遇搬移失敗,臉書表示,大型企業可能會用Messenger機器人來服務客戶,所以沒有空閒的時刻可以用來搬移資料,而且這種帳號的資料也會比典型的帳號大的多。臉書會為這些帳號設置一個開始搬移時間,並將這個時間的資料進行快照,並將快照複製進緩衝區層(Buffer Tier),再將緩衝區層的資料寫入MyRocks,而複製舊資料的同時,新寫入的資料則會被暫時快取在Iris中(下圖步驟D),一旦來自HBase的資料都被寫到新系統後,該帳號便會進入雙重寫入狀態,把快取的資料接著寫進MyRocks中。

臉書在兩周內以一般搬移流程,轉移了99.9%的帳號到新系統上,另外花了兩周,以緩衝搬移處理完剩下的帳號。臉書表示,由於臉書在MyRocks中使用先進的無損資料壓縮演算法Zstandard,使資料副本(Replication Factor)數量可以從6個下降到3個,整體節省了90%的儲存空間。他們也認為,與HBase相比,MyRocks能更成熟和更自動化的處理災難恢復。而且MyRocks在讀取和寫入方面都進行了最佳化,尤其用在快閃儲存系統上,讀取延遲明顯大降50倍,用戶在讀取歷史訊息的時候會非常有感。

由於HBase存在I/O限制,使得歷史訊息搜尋這類讀取任務繁重的功能難以實現,而臉書現在能直接將搜尋基礎架構建立在MySQL上,讓用戶可以快速的在桌面以及行動裝置上,搜尋他們的Messenger歷史對話。


Advertisement

更多 iThome相關內容