據 Instagram消息,該公司已基本完成AWS到Facebook基礎設施的遷移。聽到這個消息,筆者并不驚訝。首先,社交巨頭擁有自己的大規模數據中心;其次,作為風頭正勁的互聯網公司之一,社交巨頭擁有著大量的服務,其技術堆棧及API可以輕易滿足Instagram的架構需求;再次,在Facebook規模,不管是從成本,還是從性能及可用性上看,遷移都是上上之選。最后,避免平臺的約束和鎖定,Instagram將有更大的發展空間。言歸正傳,下面我們看一些博文摘譯:
在2012年加入Facebook之后,我們就發現了多個與Facebook基礎設施的集成點,這將允許我們更加快速的開發產品,同時還能提高社區的安全性。開始時,我們使用的是ad-hoc端點接入,但是隨后就發現這限制了我們的敏捷性及Facebook服務的利用率。
在2013年4月后,我們開始大規模的遷移到Facebook數據中心,其中的重點是服務可用性的平穩過渡,以及最小化基礎設施級改變來避免其中的操作復雜性。開始時非常簡單,在EC2和Facebook的一個數據中心之間建立連接,然后一塊一塊的遷移。
但是隨后就發現事情并非那么容易,主要的問題就是Facebook私有IP空間和EC2的沖突。我們的方法是,首先使用Amazon的Virtual Private Cloud(VPC),隨后使用Amazon Direct Connect將之與Facebook連接。
鑒于每天都會開啟新的EC2實例,這個任務看起來非常艱巨。為了最小化服務停機時間以及操作復雜性,EC2和VPC實例是否在同一個網絡至關重要。AWS并沒有提供安全組或者私有EC2與VPC網絡的共享方式,公共地址空間成為兩個私有網絡的唯一通信渠道。
因此,我們發明了Neti,一個動態的iptables操作守護進程,使用Python編寫,通過ZooKeeper支撐。Neti不僅提供了缺少的安全組功能,還為每個實例都提供了單獨的地址,不管是EC2還是VPC。Neti管理了數千個NAT以及實例上的過濾規則,從而保證了獨立的、flat “overlay”安全通信。NAT規則會為實例選擇一個最有效的通信途徑,跨越VPC和EC2邊界時會選擇公共網絡,內部通信則會選擇私有網絡。這些對我們的應用和后端系統都是透明的,因為Neti會提供一個恰當的iptables規則。
從EC2到VPC花費了大約3周時間,隨后所有實例就運行在一個兼容的地址空間,下一個階段無疑就是遷移到Facebook數據中心。
多來以來,Instagram圍繞EC2建立了一整套生產系統管理工具,其中包括配置管理腳本,用于服務開通的Chef,以及服務于運營任務的Fabric,從應用到數據庫,這些針對EC2環境的工具都將不適用于數據中心環境。
為了給這些工具提供可移植性,我們使用了LXC。配置工具用于建立基礎系統,Chef則運行在container中,用以安裝和配置Instagram特定軟件。為了支撐橫跨EC2及Facebook數據中心的基礎設施,當下的Chef加入了新的邏輯用以支撐Facebook內部使用的CentOS,之前在EC2上使用的是Ubuntu。同時,用于基礎任務的EC2命令行工具也被一個全新的工具代替,它被設計成了一個抽象層,提供了類似EC2工作流中的環境,為技術和人們使用方式做過渡。在這些都完成后,VPC到數據中心的遷移只花費了兩周。
寫在最后
對于Instagram來說,遷移可以帶來顯而易見的好處,同時,我們也相信會有更多這個類型的應用被收購后會做出類似的舉措,比如未來我們可能會看到WhatsApp遷離SoftLayer。然而對于云服務提供商來說,這絕對不是件想看到的事情,Instagram之類的到還好說,如果是Netflix這樣的合作伙伴,撇開直接收入,生態圈受到的影響顯然更加深遠。(文/仲浩 審校/魏偉)
免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!
CSDN作為國內最專業的云計算服務平臺,提供云計算、大數據、虛擬化、數據中心、OpenStack、CloudStack、Hadoop、Spark、機器學習、智能算法等相關云計算觀點,云計算技術,云計算平臺,云計算實踐,云計算產業資訊等服務。