Facebook 是如何讓 200 億張 Instagram 照片悄悄搬家的

作者 | 發布日期 2014 年 07 月 01 日 8:45 | 分類 Facebook , 伺服器 , 網路
instagram_facebook

Instagram 有 2 億用戶,上面保留有用戶分享的 200 億張照片。從 2010 年到今年春之前,這些照片一直存放在 Amazon 的 EC2 伺服器上,但現在這些照片已經被 Instagram 的一支小型團隊搬到了收購了他們的 Facebook 的資料中心上,但 2 億用戶對此卻毫不知情,仿佛什麼事情都沒發生過一樣。他們是怎麼做到的呢?



Facebook 是在以 10 億美元收購 Instagram 1 年後的 2013 年 4 月作出遷移決定的。整個轉移過程費時大約 1 年。盡管搬遷工作量巨大,但實施搬移工作的卻是一支非常小規模的團隊,搬遷開始時 Instagram 的維護團隊只有 8 人,後來才逐步擴張到 20 人。實際的資料搬遷工作只用了 1 個月時間,其餘的時間完全都是用於搬遷的準備工作。

搬遷工作的第一步,是要在 Facebook 的資料中心建立一套一模一樣的軟體。然後再把資料轉移過去。當然,這個過程要比你想象的要困難。在 Facebook 這一側啟用 Instagram 的照片共享服務之前,需要首先將 Instagram 搬遷至 Amazon 雲端伺服器的另一部分。換句話說,總共得搬兩次。

第一次搬家是將服務從 Amazon EC2 搬遷至 Amazon 的虛擬私有雲 VPC。通過 VPC,搬遷小組可以建立起一個可拓展至 Amazon 以外地方(即 Facebook 資料中心)的邏輯網路。這一步很重要,因為 Facebook 可以對執行 Instagram 的機器的 IP 地址擁有完全控制權。而只有這樣,在進行軟體搬遷時才不會出現無數的位址衝突問題。

但是,要想把 Instagram 從 EC2 搬到 VPC,首先還必須在兩者之間搭建一個公用的網路。Amazon 本身沒有提供這樣的工具,因此為了暫時解決這個問題,Facebook 自己開發了一套網路工具「Neti」。這一點說明了雲端計算的複雜性,對於任何想要跨雲端服務搭建自己應用服務的人來說,Facebook 的這一步都是一個最大的經驗教訓。

8b5f80a8315cf287175110c78e1dcfdb▲ 部分遷移團隊成員,左起依次是 Pedro Canahuati、Patrick Bozeman、Rick Branson、Nick Shortway、Chris Bray 和 Michael Gorven,(照片:Ariel Zambelich/WIRED)

Instagram 一開始沒有用 VPC 是因為 2010 年的時候 VPC 還沒有出來。因此,現在的初創企業要是一開始就未雨綢繆的話,可以考慮在 VPC 上做自己的應用軟體,這樣就能省下這一步搬遷工作。而且對於只想把部分設施搬遷到私有資料中心的人來說,用 VPC 也是明智之選。

而接下來的軟體搬遷工作,他們得靠一款越來越熱門配置管理軟體—Chef。Chef 可以為軟體 / 應用程式在大規模機器上的加載和配置編寫出自動化的「食譜(recipes 或 cookbooks)」。比方說這種食譜可以自動把適當的軟體加掛在運行於 Amazon VPC 的機器上。然後,團隊可以利用類似的食譜在 Facebook 資料中心內部的機器上掛載相同的軟體。為此,搬遷小組編寫了專門用於在各種 Instragram 資料庫伺服器上安裝軟體的食譜,然後又制作了用於配置快取伺服器(快取伺服器的用途是加速熱門照片的提供)的食譜。

如此,到了 2014 年的 4 月,最後一部分的軟體和資料也遷移到 Facebook 的資料中心上了。搬遷後的 Instagram 效率是原來的 3 倍,而且資料讀取時間減少了 80%。

此次搬遷的意義,對於 Instagram 來說,可以使用 Facebook 的計算工具,對於運營資料中心的工程師來說,此次搬遷是一個模板,也為廣大的在雲端服務至上搭建 app 的技術社區提供了一個從公有雲向私有雲遷移的範例。

當然,Facebook 的搬遷動作說到底只是相對少數。因為,對於大多數的中小企業來說,向公有雲遷移才是大勢。像 Facebook 這樣將服務從公有雲搬遷到自己私有雲的只有財大氣粗者才會這麼做。我們也相信,隨著 Docker、Mesosphere 等資源統一調度和部署管理工具的成熟,應用的遷移也會變得像即插即用一樣的容易。

[本文編譯自:wired.com

關鍵字: ,

發表迴響