歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 騰訊萬台規模的Docker應用實踐

騰訊萬台規模的Docker應用實踐

日期:2017/2/27 15:54:39   编辑:Linux教程

Docker提供了一種在安全、可重復的環境中自動部署軟件的方式,拉開了基於雲計算平台發布產品方式的變革序幕。騰訊內部對Docker有著廣泛 的使用,其基於Yarn的代號為Gaia的調度平台可以同時兼容Docker和非Docker類型的應用,並提供高並發任務調度和資源管理,它具有高度可 伸縮性和可靠性,能夠支持MR等離線業務。為了剖析Docker on Gaia背後的實現細節,InfoQ專訪了騰訊數據平台部高級工程師羅韓梅,另外作為QCon全球軟件開發大會的講師,羅韓梅將會分享題為《Gaia——萬台規模的Docker應用實戰》的演講。

嘉賓介紹

羅韓梅,騰訊數據平台部高級工程師,任數據中心資源調度組副組長。2009年加入騰訊,主要從事統一資源管理調 度平台的開發和運營,承擔過騰訊自研雲平台“台風”中Torca資源調度子系統的研發,目前主要專注於開源技術、分布式數據倉庫、分布式資源調度平台、 Docker等領域。

InfoQ:能否介紹下目前Gaia平台的狀態?你們什麼時候開始使用Docker的?有多大的規模?

羅韓梅:Gaia平台是騰訊數據平台部大數據平台的底層資源管理和調度系統,其上層業務包括離線、實時以及在線 service服務,如Hadoop MR、Spark、Storm、Hive以及騰訊內部的Lhotse、Hermes、廣點通等業務。最大單集群規模達8800台、並發資源池個數達 2500個,服務於騰訊所有事業群。我們是2014年10月份正式上線Docker,之所以選擇Docker,一方面是因為Gaia本來就一直在使用 cgroups類型的容器,深知其在共享機器資源、靈活、輕量、易擴展、隔離等方面的重要意義。另一重要原因,是Gaia作為一個通用的雲操作系統,適合 所有類型的業務,但是各個業務的環境依賴是一個比較困擾用戶的問題,因此我們引入Docker來解決,主要目的還是通過Docker來將Gaia雲平台以 更有效的方式呈獻給各個業務。

我們使用的OS是騰訊內部的tlinux 1.2版本,最新版本正在tlinux2.0上測試,除了Docker,也使用了etcd用來做服務注冊和服務發現。我們的集群都是同時兼容Docker 應用和非Docker類型的應用的,MR等應用還是使用的cgroups類型的容器,其它服務使用的Docker容器,目前,大概有15000多常駐的 Docker容器,還有大量業務接入測試中。由於我們原本就是使用的cgroups容器,所以換成Docker後,性能基本也無損耗,可以滿足線上需求。

InfoQ:騰訊是如何把Yarn與Docker深度結合的?

羅韓梅:在騰訊的場景下,首先一個特點就是,業務總類極大,尤其是離線處理規模很大,因此Yarn原生的調度 器,效率遠遠跟不上,因此我們開發了自研調度器SFair,解決了調度器效率和擴展性問題。另外,騰訊的業務特性多樣,因此我們引入了Docker,雖然 Yarn支持不同的應用類型可以實現不同的AM(應用管理器),但是對於絕大多數應用來說,他們並不熟悉Yarn,實現一個支持容災、可擴展的完善AM, 困難較大,因此我們抽象了可以使用Docker的業務,對其進行封裝,實現了統一的AM,並且對用戶透明,而對用戶提供的是另一套全新的基本的、易於理解 的高級接口。同時,我們為Docker業務實現了統一的服務注冊和發現機制,並也將其封裝在了新接口中。另外,在資源管理方面,我們修改了內存管理機制, 引入了磁盤和網絡帶寬管理。

除了Yarn之外,其實我們對Docker本身也做了一定的修改和bug修復,對於Registry等服務也做了優化,保證了其服務的高可靠和性能。

實現方面,我們並沒有使用社區提供的Docker調度器,我們研發Gaia的時候社區還沒有相應的調度器,並且我們也有特殊要求,需要同時支持同時支持Docker類型應用和非Docker類型應用。

InfoQ:你們如何確定哪些業務適合使用Docker?

羅韓梅:我們認為,Docker提供了一種在安全、可重復的環境中自動部署軟件的方式,拉開了基於雲計算平台發 布產品方式的變革序幕,因此,其實Docker對於Gaia來講,只是一個選擇,我們並不主動向業務推廣Docker,而是Docker on Gaia的整套方案,所以,我們對於需要共享資源、降低成本,需要支持快速的動態擴容縮容、容災容錯,以及大規模分布式系統尤為建議使用Docker on Gaia。

InfoQ:能否詳細介紹下你們對Docker以及Registry做了哪些優化?

羅韓梅:對於Docker,我們主要做了三個方面的優化:首先是bug修復,比如Docker非0退出時rm不 生效,對於bindmount為true時config path無法清除等bug。其次是優化Docker的資源管理策略,比如內存的Hardlimit的管理策略,不但使用戶進程容易被kill,更加造成了 資源的浪費,對用戶估計自己業務的資源需求也非常高。Gaia引入了EMC(Elastic Memory Control)的彈性內存管理機制。最後一個方面是資源管理緯度,Docker在資源管理緯度方面只有CPU和內存兩個維度,這對於共享的雲環境下需要 完善,也是目前相對於虛擬機不足的地方。Gaia引入磁盤容量管理,網絡出入帶寬控制以及磁盤IO的控制維護。其實不僅僅在Docker層做控制,還將會 引進調度器,不但實現資源的隔離,還要實現資源的保證。

對於Registry的優化,主要有下面幾個方面:

  1. 容量問題。開源的Registry是單機模式,其容量會受單個機器的限制。我們修改存儲driver,取締原有的mount方式,開發後端存儲driver,直接使用HDFS,實現了存儲的無限容量。
  2. 可靠性和可用性的問題。單機版本的Docker Registry,其可靠性和可用性都成了最大的問題,我們引入數據平台部的tPG系統,實現Registry server的無狀態化,便於實現服務的高可用性。
  3. 性能問題。將單機版的Registry擴展成Registry集群,並實現在Registry server pool中的負載均衡,提升性能。
  4. 網絡問題。解決了全國不同IDC的Gaia集群對Registry的訪問,采取就近訪問的原則,不產生跨IDC流量。
  5. 自動同步官方鏡像。Docker提供的官方鏡像中,有很多還是非常有價值的,而官方的Registry又在牆外,為此,我們自動同步docker的官方鏡像到我們的私有倉庫中。

InfoQ:能否介紹下目前的一個workflow?

羅韓梅:目前使用Docker on Gaia的方式有三種:1)通過Gaia Portal;2)直接調用Gaia api;3)通過上層各種PaaS平台透明間接使用Gaia。比如在第一種方式中,用戶通過Gaia Portal提交應用,之後Gaia調度器會自動分配資源,並且部署、啟動Docker容器,用戶可以在Portal上直接查看每個實例的狀態、日志、異 常等,甚至可以直接通過webshell登陸。同時,也可以根據需求對應用進行擴容、縮容、重啟,以及灰度變更、停止實例/應用等操作。

InfoQ:目前平台主要部署了哪些服務?服務之間的調度是如何實現的?

羅韓梅:目前平台上的服務有Hermes、通用推薦、廣點通、游戲雲等服務,很多服務都需要多實例部署,因此跨 主機部署非常普遍,而不同服務直接也經常會有調用的需求,主要是通過Gaia提供的服務注冊和服務發現機制。具體地,NM(Yarn的一個組件)在啟動 Docker容器時,會將該Docker的真正地址,包括ip和所有的端口映射,都會通過etcd做自動的服務注冊。對於Docker內部的服務,我們通 過修改Docker源碼,擴展了幾個Gaia相關的環境變量,將IP以及端口映射傳入。服務的注冊和發現本質上一種名字服務,因此不難理解為什麼在創建應 用的時候,讓用戶填一個應用 name的字段。而這種基於名字的服務是貫穿這個Gaia的過程的:在提交作業時,用戶不需要指定Gaia master的地址,而是通過指定Gaia 集群的name即可;在獲取應用的地址時,也是通過應用的名字獲取;本質上port mapping也是一種名字,只不過是將用戶原來expose的端口作為name,將實際端口作為value。至此,不難理解為什麼name需要檢查沖 突。

InfoQ:萬台規模的Docker容器,網絡問題是如何解決的?

羅韓梅:網卡及交換鏈路的帶寬資源是有限的。如果某個作業不受限制產生過量的網絡流量,必然會擠占其它作業的網 絡帶寬和響應時延。因此Gaia將網絡和CPU、內存一樣,作為一種資源維度納入統一管理。業務在提交應用時指定自己的網絡IO需求,我們使用 TC(Traffic Control)+ cgroups實現網絡出帶寬控制,通過修改內核,增加網絡入帶寬的控制。具體的控制目標有:

  1. 在某個cgroup網絡繁忙時,能保證其設定配額不會被其他cgroup擠占;
  2. 在某個cgroup沒有用滿其配額時,其他cgroup可以自動使用其空閒的部分帶寬;
  3. 在多個cgroup分享其他cgroup的空閒帶寬時,優先級高的優先; 優先級相同時,配額大的占用多,配額小的占用少;
  4. 盡量減少為了流控而主動丟包。
原文:http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice
Copyright © Linux教程網 All Rights Reserved