當前位置:
首頁 > 最新 > 每周運行30萬個容器實例-Netflix 的容器化實踐

每周運行30萬個容器實例-Netflix 的容器化實踐

關注世界領先 DevOps 平台 JFrog

Netflix 是誰?

Netflix 是歐美地區最大的網路視頻提供商,超過了 Youtube。全球每天有超過190個國家,一億多會員在 Netflix 上觀看1.2億小時的電影,電視劇和紀錄片等等。Netflix 也製作了像紙牌屋這樣廣受歡迎的電視劇。

為了應對巨大的並發流量,Netflix 用了7年時間,網站架構從傳統巨石應用演進成為業界超前的微服務架構。目前,Netflix 的雲平台上運行了500個微服務,每天會有1000次的變更部署到線上環境。線上環境部署在亞馬遜3個 Region,9個可用區,為全球用戶提供穩定的網路視頻服務。

Netflix

為什麼使用容器技術?

Netflix 在亞馬遜 EC2 上已經運行了上萬台虛擬機,他們的虛擬機集群非常的穩定,實現了雲原生應用的轉型而且非常易於擴展,為什麼還需要用容器技術?

使用容器技術提升了 Netflix 的創新速度。筆者之前的文章也提到,在 Netflix 研發團隊的文化里,創新是排名第一位,其次是產品的穩定性。所以 Netflix 對於應用的容錯性做的非常強,這樣即使創新的應用失敗,也可以將失敗的範圍控制到最小,開發者也就更敢於做創新的嘗試。Chaos Monkey 就是 Netflix 團隊發布的專門做災難性測試的工具。

使用容器可以更好的管理應用以及應用的依賴,將所有內容都打包在容器里易於管理和發布。當線上容器出現了問題,可以隨時 Pull 下來到本地進行調試,讓開發者更快的重現問題。

使用容器的 UseCase

1. 視頻媒體轉碼

之前使用虛擬機進行大量視頻流媒體的轉碼需要一個月的時間,使用容器進行高並發轉碼,只需要一周。

2. 統一代碼構建,打包和測試系統

之前 Netflix 團隊發布包之後,只會跑包本身的測試用例,並不會做上游包(UpStream)的集成測試,所以經常發布包會破壞上游包的測試,上游開發者需要反覆調試,修復問題。使用容器之後,Netflix 會在容器里跑上游包的測試用例,如果上游測試用例失敗,這次包發布也會失敗,這叫做 Fail Fast。

3. 開發者無需關心環境

例如 NodeJs 的開發者,他們完全不關心運行的系統是什麼,也不想關心,所以使用容器可以讓這些開發者專註於開發上,減少 APP 運維的成本。

Netflix

的容器管理平台 Titus

Netflix 最開始並沒有使用 Docker,而是使用 CGruop,之後使用了 Mesos 進行容器的管理,目前推出了自行研發的 Titus 容器管理平台,實現容器的管理。

市場上已有了很多容器管理平台,為什麼需要自行研發容器管理平台?由於市面上的平台多數關注於數據中心的建設,支持混合雲的方案,且目前市面上的方案沒有能夠滿足 Netflix 如此大規模的容器使用情況。

Titus 的最初是用來管理 Netflix 內部大量的 Batch 任務,主要包括視頻轉碼,加水印,生成每日 CDN 網路流量的報表。 這些任務有些共同的特點,耗時較長,屬於計算資源密集型的任務,並且不依賴於平台,比較適合用容器來運行。

後來 Titus 開始接管 Services,Services 的要求比 Batch 任務要高很多,需要實時擴容,且需要不間斷的運行,服務有更多的狀態管理需求,難以升級等等。對此,Titus 做了很多容器管理的改進。

網路管理

在 VPC 網路里使用 Docker。通過 Titus 的執行器,可以創建一個 Namespace,創建並啟動一個 Pod root container,類似於 K8S 的 Pods。隨後創建 Veth,路由的規則,iptables 等等。

Metadata Proxy

Metadata Proxy 是 Titus 基於亞馬遜的 Metadata Service 實現的統一網路管理模塊。它解決的是容器的安全問題,它統一管理的容器的 「whoami」 的信息,例如容器的 IP,許可權,容器的宿主機 ID,域名等等,容器本身無法知道宿主機的更多信息,從而確保容器的網路安全性。將 VPC 網路和 Metedata Proxy 合起來,就是下面的這張圖:

和 Spinnaker CI/CD 集成

Titus 和 Netflix 現有的CI/CD 工具 Spinnaker 進行了集成。在創建 Spinnaker 的集群時,Spinnaker 提供了 AWS 虛擬機集群的創建,和 Titus 容器集群的創建。

當某個容器 Push 到了 Artifactory Docker 註冊中心,這個 tag 會實時的顯示在 Spinnaker 部署的任務里供用戶選擇 Docker 鏡像的版本。

Titus 也集成了 Chaos Monkey,在 Chaos Monkey里執行線上環境破壞性測試的時候,選擇 Titus,就會隨機銷毀在線上運行的容器。

Fenzo 任務調度框架

Netflix 開源了任務調度框架 Fenso,它是一個可擴展的任務調度框架,用於管理所有調度任務的生命周期。

你只要給 Fenzo 一個任務列表,並且給 Fenzo 一堆可以的計算資源,Fenzo 就會自行決策,進行任務的執行。如果你給的計算資源太少,不足以執行所有任務,Fenzo 會告訴你需要多少計算資源,如何擴容。

Titus 和 Fenzo 集成

為了實現計算資源利用率的最大化,Netflix 的生產環境和 Batch 任務會共用容器資源。某些 Batch 任務會佔用大量的計算資源,導致在生產環境的 APP 需要擴容時,得等待 Batch 任務執行完成,才能獲取資源。

為了解決這個問題,Fenzo 將容器分為核心層和 Flex 層,核心層的應用會保障擴容的能力。Flex 層會將低優先順序的任務進行排隊執行。

Titus 的現狀

之前 Titus 是和 Netflix 內部的 Mesos 的平台進行容器管理,目前已使用 ECS 替換了 Mesos 作為容器編排的平台。

Titus 支持了 OutBound 和 Inbound 的請求處理,從 OutBound 可以實現 ECS 里容器的啟動和停止。如果容器停止,CloudWatch 會監測到 ECS 的變化,並且通知 Titus 里任務的狀態變化。

未來 Titus 將會專註於基於:

1. 服務的自動擴容,以及跨數據中心的容器負載均衡。

2. 實現核心層任務的 SLA 保障,當核心層的計算資源達到上限時,會將 Flex 層的資源搶佔過來,保障核心層任務的 SLA。

3. 更好的支持動態擴容。

關於JFrog

世界領先DevOps平台

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 JFrog傑蛙DevOps 的精彩文章:

TAG:JFrog傑蛙DevOps |