負責IT架構、電子商務和系統工程的Netflix總監Adrian Cockcroft在官方部落格上分享這次Amazon大當機因應經驗。

影片租賃服務Netflix是北美網路流量最大的網站,全美網路流量有2成都是用來傳輸Netflix提供的影片。Netflix在2010年10月時才決定改用Amazon的EC2來提供所有的線上影音服務,不再建置新的資料中心。全美流量最大的服務商的這項背書,無疑是對Amazon雲端服務穩定性的一大保證。

不料,今年4月21日凌晨,Amazon北維吉尼亞機房發生了EBS(Elastic Block Service)服務大當機事件, 完全仰賴EC2提供服務的Netflix自然也受到波及,但是只有發生影音傳輸速度變慢的情況。雖然在當機期間,用者抱怨大幅增加,但沒有像有些知名網站如Quora幾乎是服務完全中斷的情況,Netflix等於是順利度過這次當機的考驗。

當Amazon美東地區(Region)的一座AZ服務區域(Availability Zone,相當於是一座資料中心)失效時,Netflix工程團隊就決定趁使用者流量還未達到顛峰前,將所有服務撤離這個區域,並且手動設定流量負載規則,避開發生問題的地區,確保服務不致中斷,也因此而沒有發生嚴重的災情。

在事件發生之後,負責IT架構、電子商務和系統工程的Netflix總監Adrian Cockcroft與2位同僚聯名在官方部落格上發表長文,分享Netflix順利度過這次當機事件的關鍵,以及從中得到的教訓。

5大防當機設計

Netflix表示,2010年底時,Netflix將全數服務轉移到Amazon上時,也重新調整了IT架構,這個新架構讓Netflix度過這次的AWS審判日的考驗。其中最重要的幾項防當機關鍵包括了,Stateless Services(無狀態服務)設計、跨區域儲存資料、功能移除機制、N+1備援、以及大量使用雲端解決方案的服務架構。

首先,無狀態服務的設計是Netflix重新打造IT架構的重點,新架構會讓所有的API服務可以指派給任意的虛擬機器(Instance)來提供服務,而不需要綁定在特定的伺服器上,有些必須要持續使用的Session資料,例如每一次放進購物車中的資料,則由另外的Session伺服器來統一管理,讓前端提供服務的伺服器不需要保留這些統合性的資料。這個設計的好處是,可以隨時切換服務節點,快速由新節點取代發生問題的節點。

其次,Netflix平時會定期將提供給使用者的影音內容和伺服器資料備份到Amazon的其他服務區域,遇到單一AZ服務區域發生問題時,就可以由其他區域快速接手提供,而不用再等待資料回復的時間。

第三、為了避免部分失功能拖累了整套系統,Netflix也預先設計了多種快速移除部分功能的機制,遇到有少數元件發生問題,可以先關閉部分功能,確保其他服務可以繼續執行。這些功能移除機制的設計原則包括了能快速中止元件(Fail Fast)、提供候補功能(Fallbacks)、可直接移除的功能(Feature Removal)等設計。

第四,在備援設計上,Netflix採取了N+1備援的作法,任何時刻,都會提供比使用量更多的運算資源,而且不是採用主從式的備援,或是部分離線的備援,而是隨時都會額外多一份資源的作法。Netflix將服務主機散布在Amazon美東地區4座服務區域(資料中心)的3座,每個服務區域內都會有提供額外AWS備援,以避免單一區域服務失效,雖然每年會增加三分之一的費用,但可以確保影音服務不會中斷。

最後一項就是大量使用雲端解決方案的作法,相較於過去實體資料中心的作法,雲端IT架構讓Netflix的應用系統很容易地在不同資料中心間切換,也搭配了NoSQL資料庫來提高可用性,另外還使用S3儲存來提供更耐用的資料備份。

整體性自動化工具不足與負載設計盲點

不過,在這次因應Amazon當機事件的過程中,Netflix也發現幾項有待改進的缺失,第一個就是手動轉移全數服務的過程中,原本用來自動部署和調整AWS設定檔的工具,無法同時調整所有的設定檔,過去只為局部性調整或特定用途而開發工具,缺乏一套整體性的自動化工具,例如無法用一個指令就將某一類服務全數搬移到另一個區域。換句話說,每一種服務的負責團隊,都得人工手動切換,也提高了轉移過程的風險。Netflix表示,因為服務規模太大,大量轉換時的工具不足,未來會先簡化轉移程序,增加更多自動化設計和工具。

其次是負載平衡的盲點,原本Netflix使用Amazon提供的ELB負載平衡服務來切換所有前端服務的流量,但因ELB只能在Amazon的單一服務區域中分散流量,而無法達到跨區域的負載平衡,如果在單一區域中過多伺服器當機,就會讓負載平衡機制失效,進而讓整個區域的服務中斷。

ELB是一種2階層式的負載平衡設計,第一層是DNS負載平衡切換,第二層則是由AWS直接提供的ELB服務,在這次當機事件中,EBS失效問題也影響了AWS的服務,進而導致這個服務區域的ELB發生問題。Netflix打算建立另一個中間層的負載平衡機制,不使用ELB機制,而且可以跨不同服務區分散流量。

3項改進重點

綜和這次當機事件,Netflix決定進行3項改進作法,首先是建立更多失效測試機制,原本Netflix就自行打造了一個自動化測試服務Chaos Monkey,可以用來模擬系統失效的情況,例如臨時中止某些服務,來測試備援機制的運作。但是這個Chaos Monkey沒有考慮到整座資料中心失效的情況,只考量到資料中心內少數虛擬機器失效的情況,未來Netflix會加入整座資料中心失效的模擬。

另外,Netflix也決定開發跨地區(Region)的自動化工具,因為Amazon提供的自動化備援機制或備份機制,只能在單一地區內跨服務區域,例如美東地區的服務區域,但就無法自動跨越美東地區和亞洲地區等多地區。這次Netflix工程團隊只能手動將服務轉移到其他地區的AZ服務區域。未來,Netflix也會針對全球各地區的服務來設計可以跨地區的影音服務,這樣的設計也有助於提高服務可用性。

最後,為了降低對EBS儲存資源的依賴,Netflix決定使用S3備份服務來提供靜態的虛擬機器映象檔備份,並且要將MySQL EBS資料庫轉移到Cassandra這類NoSQL資料庫上,利用EC2本地端資料庫搭配分散式設計來確保資料庫服務。

雖然Amazon發生了這樣的大當機事件,但Netflix仍然認為,「使用Amazon的AWS服務來取代實體資料中心的策略是正確的方向,這次大當機只是一次考驗,這些從中學習到的經驗,更加確認這個方向的信心」。負責Netflix整體架構的Adrian Cockcroft表示。

 

Netflix預防雲端服務當機的5項關鍵作法

5項防當機設計

1.API無狀態服務(Stateless Services)設計:所有的API可指派給任意虛擬機器來提供服務,而不需要綁定在特定的伺服器。

2.跨區域儲存資料:定期將提供給使用者的影音內容和伺服器資料備份到Amazon的其他服務區域,遇到單一AZ服務區域發生問題時,就可以由其他地區快速接手提供服務。

3.快速移除功能的機制:為了避免部分失效功能拖累了整套系統,預先設計了多種快速移除部分功能的機制,遇到有少數元件發生問題,可快速關閉這些有問題的功能。

4.N+1備援:任何時刻都會提供比使用量更多的運算資源,每個Amazon的服務區域內也會各自準備額外運算資源,避免單一服務區域內的故障問題。

5.大量使用雲端解決方案:Netflix將所有服務轉移到Amazon上以後,新的雲端IT架構,大量使用雲端解決方案,應用系統很容易地在不同服務區域間切換,可避開發生問題的區域。

3項未來改進重點

1.自動化失策模擬測試機制增加更多可能的服務失效情況,包括整座服務區域(資料中心)失效的情況。

2.開發跨地區(Region)的自動化工具,以及設計誇全球各地區的服務架構,來提高可用性。

3.降低對EBS儲存資源的依賴,改用S3儲存服務提供靜態資料備援,以及搭配NoSQL資料庫Cassandra,來提供資料庫的動態備援機制。

資料來源:Netflix,iThome整理,2011年6月

 


相關報導請參考「Amazon雲端服務大當機的啟示

熱門新聞

Advertisement