Instagram在如何越洋擴展基礎設施?
譯文【51CTO.com快譯】2014年,Instagram加入Facebook兩年后,Instagram的工程團隊該將公司的基礎設施從亞馬遜網絡服務(AWS)服務器遷移到了Facebook的數據中心。Facebook在歐美有多個數據中心,但直到最近Instagram才使用美國的數據中心。
Instagram想把基礎設施擴展到大洋彼岸的主要原因是,我們在美國已沒場地可用。隨著服務不斷增多,Instagram已到了我們需要考慮利用Facebook建在歐洲的數據中心的地步。另一個好處是:本地數據中心意味著對歐洲用戶來說延遲更低,這有望在Instagram上打造更好的用戶體驗。
2015年,Instagram將基礎設施從一個數據中心擴展到了三個,以提供急需的彈性:我們的工程團隊不想重蹈2012年AWS災難的覆轍,當時弗吉尼亞州的一場大風暴導致其近一半的實例癱瘓。從三個數據中心擴展到五個很輕松;我們只是增加了復制因子,將數據復制到新的區域;然而當下一個數據中心遠在另一個大陸時,擴展起來會更難。
了解基礎設施
基礎設施通??煞譃閮煞N類型:
- 無狀態服務通常用作計算,根據用戶流量進行擴展(按需擴展)。Django Web服務器就是個例子。
- 有狀態服務通常用作存儲,必須在數據中心之間保持一致性。比如包括Cassandra和TAO。
每個人都喜歡無狀態服務,它們易于部署和擴展,可以隨時隨地根據需要來啟動。事實上,我們還需要像Cassandra這樣的有狀態服務來存儲用戶數據。運行帶有太多副本的Cassandra不僅增加了維護數據庫的復雜性,還浪費了容量,更不用說越洋傳輸仲裁(quorum)請求有多慢了。
Instagram還使用TAO(面向社交圖的分布式數據存儲)作為數據存儲系統。我們將TAO作為每個分片(shard)的單個主系統(master)來運行,沒有任何從屬系統(slave)為任何寫入請求更新分片。它將所有寫入內容轉發到分片的主區域。由于所有寫入都在位于美國的主區域進行,所以歐洲那邊的寫入延遲無法忍受。你可能注意到我們的問題反饋基本上是光速。
潛在解決方案
我們能否縮短請求越洋傳輸的時間(甚至使往返傳輸消失)?有兩種方法可以解決這個問題。
1. 對Cassandra分區
為了防止仲裁請求越洋傳輸,我們在考慮將數據集分為兩部分:Cassandra_EU和Cassandra_US。如果歐洲用戶的數據存儲在Cassandra_EU分區中,美國用戶的數據存儲在Cassandra_US分區中,用戶的請求就不必遠距離傳輸來獲取數據。
比如說,假設美國有五個數據中心,歐盟有三個數據中心。如果我們通過復制當前集群而在歐洲部署Cassandra,復制因子將是8,仲裁請求必須與8個副本中的5個進行聯系。
但是如果我們可以找到將數據分成兩組的方法,就會有一個復制因子是5的Cassandra_US分區和一個復制因子是3的Cassandra_EU分區,每個分區可獨立運行,而不影響其他分區。與此同時,每個分區的仲裁請求能夠保持在同一個大陸,因而解決往返傳輸的延遲問題。
2. TAO僅限于寫入到本地
為了縮短TAO寫入的延遲,我們可以將所有EU寫入限制于本地區域。這在最終用戶看來幾乎一樣。我們向TAO發送寫入時,TAO將在本地更新,不會阻止同步向主數據庫發送寫入;相反,它會在本地區域將寫入放到隊列中。在寫入的本地區域,數據可立即從TAO獲取,而在其他區域,數據將在從本地區域傳播后可用。這類似今天的常規寫入,數據從主區域傳播。
雖然不同的服務可能會有不同的瓶頸,但如果致力于減少或消除越洋流量這個想法,我們能逐一解決問題。
經驗教訓
與每個基礎設施項目一樣,我們在此過程中汲取了一些重要的經驗教訓。以下是幾個主要的。
- 別急著搞新項目。開始在新數據中心配置服務器之前,確保你了解為什么需要在新區域部署服務、有什么樣的依賴關系以及新區域投入使用時系統會如何運行。此外,別忘了反思災難恢復計劃,并進行必要的改動。
- 別低估復雜性。總是在你的日程安排中留出足夠的時間,因為要犯錯誤,要找出意外的阻礙因素,要學習你不了解的新的依賴關系。你可能發現自己無意中在重新設計構建基礎設施的方式。
- 明白取舍。成功總是要付出代價。我們對Cassandra數據庫進行分區后,通過縮小復制因子,節省了大量存儲空間。然而為了確保每個分區仍然準備好面對災難,我們需要更多的前端Django容量,以接受來自故障區域的流量,因為現在分區無法彼此共享容量了。
- 耐心一點。在開啟歐洲數據中心的過程中,我不記得有多少次我們說過“哦,見鬼!”但事情總是最終得到了解決。可能比你預期的要更久,但要有耐心,整個團隊要通力合作,這是超有意思的過程。
原文標題:How Instagram is scaling its infrastructure across the ocean,作者:Sherry Xiao
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】