Facebook如何將Instagram從AWS搬到自己的服務器
當Instagram在2012年加入Facebook,我們快速建立了大量的Facebook基礎設施整合點,以加速產品開發,使社區更加安全。一開始我們通過使用ad-hoc端點在Facebook web服務之間有效傳遞來構建這些整合。不過我們發現這種方式可能稍顯笨拙,還限制了我們使用內部的Facebook服務的能力。
2013年四月伊始,我們開始將Instagram的后端從Amazon Web Services(AWS)向Facebook的數據中心大規模遷移。這將緩和與其他內部的Facebook系統整合并允許我們充分利用為管理大規模服務器部署構建的工具。遷移的主要目標是在過渡中保持網站的完整服務,避免影響特性部署,最小化基礎設施級別的改變來避免操作的復雜性。
起初遷移好像很簡單:在Amazon的Elastic Compute Cloud(EC2)和Facebook的數據中心之間搭建一個安全的連接,一塊一塊地將服務遷移過來。簡單。
不止如此。這個簡單的遷移的主要障礙是Facebook的私有IP空間和EC2的私有IP空間沖突。我們只有一條路可走:先遷移到Amazon的Virtual Private Cloud(VPC),隨后使用Amazon Direct Connect遷移到Facebook。Amazon的VPC提供了必要的伸縮尋址來避開與Facebook的私有網絡沖突。
我們對這個任務望而卻步;在EC2上運行著數以千計的實例,還有每天出現的新實例。為了最小化停工時間和操作上的復雜性,運行在EC2和VPC中的實例必須像是來自同一個網絡。AWS沒有提供分享安全群組的方法,也沒有私有EC2和VPC網絡的橋接。這兩個私有網絡通信的唯一方法是使用公共地址空間。
所以我們用Python開發了Neti—— 一個動態IP信息包過濾系統守護進程,由Hadoop的正式子項目ZooKeeper提供支持。Neti提供了安全群功能,并且為運行在EC2和VPC中的每一個實例提供單獨地址。它管理著上千個本地NAT和每一個實例的過濾規則,允許使用獨立的、平坦的"重疊"("overlay")地址空間進行安全通信。NAT規則在源實例和目標實例之間選擇***效的路徑。VPC和EC2之間的實例通信使用公共網絡,內部通信使用私有網絡。這對我們的應用和后端系統是透明的,因為Neti在每一個實例上應用了合適的IP信息包過濾系統。
構成Instagram棧的各式各樣的組件從EC2到VPC環境的遷移不到三周,這讓我們相信如果沒有Neti,時間會長很多。在此過程中,沒有出現過重大的服務停工,同時也讓我們很快意識到這是有史以來最快的VPC規模遷移。
隨著VPC遷移的完工,我們的實例運行在兼容的地址空間中,Instagram準備開始完成向Facebook數據中心的遷移。
一個圍繞EC2構建的工具集已經存在多年,它管理著Instagram的產品系統,包括配置管理腳本,用來供應的Chef("大廚”),從應用部署到數據庫master提升等廣泛的操作任務使用的Fabric。這個工具集對EC2做出的假定在Facebook環境中已經不再適用。
為了讓我們的供給工具更加輕便,Instagram特定的軟件現在都運行在Facebook數據中心服務器上的一個Linux容器中(LXC)。Facebook供應工具用來構建基礎系統,Chef運行在容器中安裝并配置Instagram特定的軟件。為了提供跨越EC2和Facebook數據中心的的基礎設施,我們目前的Chef recipes("大廚配方“)就是否允許它們支持Facebook內部使用的CentOS平臺一并支持在EC2中使用的Ubuntu的新邏輯展開爭論。
用于基礎任務的EC2特定命令行工具,例如枚舉運行主機和Chef“knife"工具內的供給支持,被同一個工具替代。這個工具被設計成一個抽象層,向EC2中使用的工具提供相似的工作流,減少了人的壓力,緩和了向新環境的技術過渡。
我們在工具和環境到位后的兩周內完成了Instagram的產品基礎設施從VPC到Facebook的數據中心的遷移。
這個分階段的工作達到了工程開始時設定的主要目標,是一次巨大的成功。此外,在計劃和執行遷移的階段中,團隊運送了接近兩倍的諸如Instagram Direct的主要特性和我們的用戶基數。我們恪守最小化改變的客觀初衷,所以過渡對于我們的工程團隊幾乎是透明的。
回顧一下這個一年之久的工程的一些關鍵點(key takeaways):
-
計劃支持新環境的最小改變, 避免 “while we’re here.”的誘惑。
-
有時,瘋狂的想法是有用的——Neti是一個證明。
-
投身于打造你的工具;執行這樣的大規模遷移,你最需要的是出人意料的曲線球。
-
重用團隊熟悉的概念和工作流以避免向團隊摻雜通信改變的復雜。
這是多團隊和諸多個體貢獻者的通力協作。在接下來的幾周,我們將提供這個遷移工作更深入的介紹,時刻關注這個空間。