《Netflix的容器技術迎來兩個重大里程碑》要點:
本文介紹了Netflix的容器技術迎來兩個重大里程碑,希望對您有用。如果有疑問,可以聯系我們。
作者:Andrew Spyker等
譯者:大愚若智
容器技術在Netflix基于AWS EC2虛擬機打造的全球云平臺中大放異彩,并產生了深遠影響.之前我們曾分享過不少有關Netflix使用容器的故事(視頻、幻燈片),本文將深入討論Netflix對容器的使用情況,以及Netflix為基于容器的應用程序打造的底層基礎架構Titus.Titus為Netflix提供了可伸縮的集群和資源管理能力,增強了容器執行與Amazon EC2之間的集成度,提供了Netflix所需的通用基礎架構功能.
本月,Netflix的容器技術迎來兩個重大里程碑.首先,我們的平臺規模更上一層樓,在一周內順利擴展至上百萬個容器.其次,Titus現已可為提供流播服務客戶體驗的功能提供支持.我們將深入介紹Docker容器的具體使用方法,以及使得該容器運行時顯得如此獨一無二的原因.
基于Amazon虛擬機(EC2)的基礎架構早已成為Netflix實現各項創新的重要推動力.除了虛擬機,我們還大量使用基于容器的工作負載,這類工作負載為我們提供了獨特的價值.容器技術帶給我們不菲的收益,對此我們倍感激動,同時容器的用量也經歷了爆發式增長,甚至我們自己的開發人員都對這些因素感到吃驚.
雖然EC2支持對服務進行高級調度,但我們的批處理用戶無法從中獲益.Netflix有很多用戶需要同時運行多個作業,甚至要通過基于事件的觸發器分析數據,執行運算,并將結果發送給其他Netflix服務、用戶,以及報告.我們需要每天多次運行諸如機器學習模型訓練、媒體編碼、持續集成測試、大數據Notebook,以及CDN部署分析作業等工作負載.因此我們希望為基于容器的應用程序提供不依賴具體工作負載類型的通用資源調度器,通過更高級的工作流調度器對所有內容進行集中控制.Titus可同時承擔通用部署單位(Docker鏡像)和通用批處理作業調度系統的任務,它的順利上線幫助Netflix通過擴展為批處理用例提供了更好的支持.
借助Titus,我們的批處理用戶只需要指定自己對資源的需求,即可快速獲得成熟的基礎架構環境.用戶無須選擇并維護在規模方面無法與自己的工作負載完美匹配的AWS EC2實例,而是可以安心地通過Titus將更大規模的實例“打包”在一起,高效運用于不同類型的工作負載.批處理用戶可在本地編寫代碼,隨后立即通過調度通過Titus進行大規模執行.在容器的幫助下,Titus可以運行任何批處理應用程序,并且可以明確指定自己需要的應用程序代碼和依賴項.例如,在機器學習訓練過程中,用戶將能配合運行Python、R、Java和Bash腳本應用程序.
除了批處理,我們發現其他工作負載也能從更簡單的資源管理和本地開發體驗等方面獲益.通過與Edge、UI和設備工程團隊合作,我們還將這些收益擴展到了服務的使用者群體.目前,我們正在通過重建將面向具體設備的服務器端邏輯部署到API層,這樣即可更充分地利用面向單內核優化的NodeJS服務器.我們的UI和設備工程團隊還希望獲得更好的開發體驗,例如與生產環境完全一致,更簡單的本地測試環境.
除了一致的環境,開發者還可以在容器技術的幫助下,通過Docker層鏡像和面對容器部署進行優化的預供應虛擬機,更快速地推送新版應用程序.現在,使用Titus進行的部署可在1-2分鐘內完成,而以往單純使用虛擬機時往往需要數十分鐘.
所有這些改進都源自開發者更快速的創新.現在,批處理用戶和服務用戶都可以更快速地在本地進行實驗和測試,他們還可以更自信地將代碼部署到生產環境.這樣的速度也可以讓Netflix客戶更快獲得各類新功能.可以說,容器技術對我們的業務非常重要.
上文介紹了我們構建Titus的原因.下文將深入介紹Titus到底是如何提供這些價值的.我們將簡要介紹Titus的調度功能和容器的執行如何為服務和批處理作業需求提供支持,具體情況如下圖所示.
在處理應用程序的調度工作時,Titus可對所需資源和可用計算資源進行匹配.Titus可支持“永久”運行的服務作業,以及“持續運行直到完成”的批處理作業.服務作業可重啟動失敗的實例,并通過自動伸縮與負載的變化相匹配.批處理作業可根據策略進行重試并一直運行直到完成.
Titus為資源調度提供了多種SLA.通過EC2的自動伸縮功能,Titus可根據當前需求為即席(Ad hoc)批處理和非關鍵內部服務提供按需獲取的計算容量.它還能為用戶需要執行的工作負載和更關鍵的批處理任務提供預配置、有保障的容量.調度器可通過集裝優化(Bin packing)提高大規模虛擬機的效能,并能通過反關聯性(Anti-affinity)實現跨越虛擬機和可用性集的可靠性.這種調度功能源自Netflix開發的一個名為Fenzo的開源庫.
Titus容器運行在EC2虛擬機基礎上,并能與AWS和Netflix基礎架構進行集成.我們預測到用戶會在很長一段時間內同時使用虛擬機和容器,因此決定盡可能讓云平臺和運維體驗保持簡單.使用AWS的過程中,我們選擇盡可能利用現有的EC2服務.例如,我們會使用Virtual Private Cloud(VPC)獲得可路由的IP,而沒有使用單獨的網絡覆蓋(Network overlay).我們使用Elastic Network Interface(ENI)以確保所有容器都包含特定應用程序所需的安全組.Titus提供的元數據代理使得容器可以了解自己運行環境特定的容器視圖以及IAM憑據.容器無法看到宿主機的元數據(例如IP、主機名、實例ID).我們還配合使用Linux、Docker,以及自有的隔離技術實施了多租戶隔離(CPU、內存、磁盤、網絡、安全).
為了成功地在Netflix的環境中應用容器技術,我們還要將其與現有開發工具和運維基礎架構無縫集成.例如,Netflix已經具備持續交付解決方案Spinnaker.雖然也可以通過調度器進行滾動更新并實現其他CI/CD概念,但通過Spinnaker提供這樣的功能使得我們的用戶可以跨越虛擬機和容器使用一套一致的部署工具.另外還有個例子:服務之間的通信.我們會盡可能避免重新實現服務發現和服務負載均衡工作,取而代之的是提供一個完整的IP棧,借此容器將能與現有的Netflix服務發現和基于DNS(Route 53)的負載均衡機制配合使用.在這些例子中,Titus成功與否的一個關鍵原因在于:需要確定那些事情不該通過Titus來做,而是應該利用其他基礎架構團隊所提供的相關功能來實現.
繼續使用現有系統的代價是:我們需要對這些系統進行擴充,以便能與虛擬機和容器技術配合使用.除了上文列舉的例子,我們還需要對遙測、性能自動調優、健康度檢查系統、混沌自動化(Chaos automation)、流量控制、區域性故障轉移支持、密文管理,以及交互式系統訪問等機制進行擴充.另一個代價是:由于需要與Netflix的這些系統進行深入綁定,這使得我們很難利用其他開源容器解決方案提供容器運行時平臺之外的其他功能.
以我們的規模(以及工作負載密度)來說,容器平臺的運行還需要密切關注可靠性,并且我們還會在系統的所有層面上遭遇不小的挑戰.我們已經順利解決了Titus軟件,以及所依賴的其他開源軟件(Docker Engine、Docker Distribution、Apache Mesos、Snap和Linux)相關的伸縮性和可靠性問題.我們針對整個系統的所有層面設計了失敗處理機制,包括通過協調促進資源管理層和容器運行時之間分布式狀態的一致性.通過清晰衡量的服務級別目標(容器發布啟動延遲、由于Titus中問題導致容器崩潰的百分率,以及系統API整體可用性),我們可以更好地對可靠性和功能進行權衡.
容器技術幫助工程師提高效率的一個關鍵原因在于開發工具.開發者生產力工具團隊構建了一個名為Newt(Netflix Workflow Toolkit)的本地開發工具.通過本地迭代并借助Titus進行部署,Newt可簡化容器開發工作.通過在Newt和Titus之間實現一致的容器環境,也可以幫助開發者更自信地編寫代碼.
為了驅動Netflix的服務,我們通過三個Amazon區域,用多個測試和生產賬戶運行了多個Titus棧.
2015年12月發布Titus后,當時我們每周需要啟動數千個容器,用來處理少量工作負載.上周,我們啟動了上百萬個容器,這些容器中運行了數百個工作負載.一年多時間里,容器的用量增加了1000倍,而增長勢頭依然沒有任何放緩的跡象.
為了向批處理用戶提供支持,我們在峰值時段運行了500個r3.8xl實例,這意味著16,000個處理器內核,以及120TB內存的規模.我們還通過p2.8xl實例獲得了所需的GPU資源,借此支撐基于神經網絡和微批(Mini-batch)的深度學習功能.
2017年上半年,流處理即服務團隊決定通過Titus為自己基于Flink的系統提供更簡單快速的集群管理能力.這一決定導致新增了超過10,000個長期運行的服務作業容器,并且隨著流處理作業的變化,這些容器都需要重新部署.各種服務共使用了數千個m4.4xl實例.
雖然上述用例對我們的業務很重要,但這些用例都不會對Netflix的客戶產生直接影響.不過這種情況最近有了些變化,最近我們開始通過Titus容器運行某些直接面向Netflix客戶的服務.
用于支撐直接面向客戶的服務,這個決定必須慎重.過去六個月來,我們一直在對虛擬機和容器之間的實時通信進行復制,并使用復制的流量了解如何更好地運維容器,以驗證該平臺是否已經面向生產環境做好了準備.通過大量的前期工作,我們已經可以自信地在基礎架構中推行如此重大的變動.
Netflix得以成功運用Titus的原因之一在于,Titus開發團隊所積累的寶貴經驗和不斷的成長.我們的容器用戶堅信不疑地認為,Titus團隊可以通過Titus的運維和創新滿足自己的需求.
這個團隊的后續成長還有很長的路要走,我們也希望能將這個容器運行時和開發者體驗擴展到更多領域.
Andrew Spyker、Andrew Leung和Tim Bozarth代表整個Titus開發團隊撰文并發布.
閱讀英文原文:The Evolution of Container Usage at Netflix
文章來自微信公眾號:細說云計算
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4162.html