前言:尋找寫作靈感?中文期刊網用心挑選的容器調度策略及通信技術研究,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。
摘要:隨著云計算技術在各行業的深入應用,服務器資源的快速部署成為一種必需的要求。目前服務器集群的并發量及伸縮性是瓶頸,低負載會導致服務器資源的浪費,而高負載又會影響用戶的訪問質量。以Docker為代表的容器技術實現了輕量級的虛擬化,提高了各種資源的使用效率和隔離方式。然而,對于大規模的容器集群,如何高效地進行任務調度,提高通信效率以及通信的安全性,是目前討論的焦點。對容器技術中的任務調度及通信技術進行研究,并分析對應的優化策略,有重要的現實意義。
0引言
云計算技術目前已經在各行各業得到廣泛應用,虛擬化技術是云計算的基礎,能夠把物理資源映射為虛擬資源,從而在最大程度上提高了物理資源的利用率。傳統的虛擬化技術在創建及銷毀實例的過程中,都需要很大的資源和時間開銷;最重要的是,如果要大規模的部署使用,隨著服務器數量的增加,傳統虛擬化技術的缺陷會被進一步放大。Docker容器技術是一種全新的基于LinuxContainer容器引擎的輕量級虛擬化技術,能夠實現應用的高效部署,同時保證資源的隔離。
1Docker及容器技術
Unix系統下的chroot是最早的容器技術,目的是把root用戶的資源轉移到其他位置,并僅僅允許指定進程訪問,從而實現不同進程的隔離。后來又先后出現了LXC容器技術、Docker容器技術等。Docker容器技術是dotCloud公司的開源項目,其中包含倉庫、鏡像模型、命令行工具以及RESTAPI工具等和容器管理關聯的生態系統。在Docker了正式版本后,RedHat也提供了對Docker的支持,隨后谷歌、亞馬遜、微軟等也先后宣布支持。谷歌于2015年首次公開了Kubernetes,將之作為Docker容器的編排工具。國內的騰訊、京東等公司先后在生產系統中使用Docker容器技術。Docker容器技術的隔離是通過完全沙箱的方式實現的,因此即使兩個容器運行在同一宿主機上,也不會有直接訪問的接口,從而保證了資源的獨立訪問。另外,容器和宿主機間共享內核資源,從而降低了資源運行時需要的開銷。
2容器技術中的調度策略
雖然Docker在應用的分發、部署等方面具有巨大的優勢,然而隨著Docker在服務器集群上的應用范圍逐漸擴大,如何提高Docker集群中任務調度的效率、最大化集群資源的利用率已經是一個重要的現實問題。另外,Docker容器中的網絡應用也越來越多,從而對Docker的網絡通信技術提出越來越高的要求。這樣一來,如何保證部署不同應用的Docker容器間的通信質量,也成為一個巨大的挑戰。
2.1容器集群
隨著部署在Docker容器中的應用越來越多,容器的規模也不斷增加,僅僅在單個宿主機上構建容器無疑會導致瓶頸,因此使用Docker集群就成為理所當然的事情。Docker集群對外是一個單一的服務實體,由多個相互獨立的服務器個體組成。集群一般有兩大特性[1]:(1)負載均衡。用戶請求或數據會根據一定的均衡原則分攤到集群中的多個實體上執行,從而可以按照不同服務器的實際處理能力分配相稱的任務;在充分利用集群內各種資源的基礎上,最小化任務的執行時間,同時提升集群的處理能力。(2)故障恢復。如果集群中的服務器因為資源短缺或故障原因無法繼續執行任務,則需要從集群中選擇合適的節點繼續執行。Docker集群中的所有節點都部署了Docker服務,各節點上的物理資源分配給需要的Docker容器使用。和傳統集群不同的是,Docker集群除了包含物理節點外,還包括各物理節點上的Docker容器;這種多層次的Docker容器集群在實現負載均衡和故障恢復時,就不能簡單的應用傳統集群的調度策略,需要一種合理而又高效的調度策略完成Docker容器集群的任務調度工作。目前在部署并管理Docker容器集群時,已經有集中使用廣泛的工具,主要包括[2]:(1)Kubernetes。谷歌在多年Docker容器開發經驗的基礎上,為Docker集群提供的資源調度、負載均衡套件。雖然Kubernetes提高了Docker集群的管理能力,但由于其學習成本較高,因此并沒有被推廣到多數應用Docker的場合。(2)Swarm。Docker官方提供的集群工具,具備資源調度、負載均衡以及服務發現的能力,不需要額外的學習成本,因此應用范圍比較廣。然而,Swarm的負載均衡策略比較簡單,并且其故障恢復功能不佳。和Kubernetes相比的優勢在于不需要針對Docker做定制化的修改。(3)Mesos。Apache旗下的比較成熟的分布式管理框架,其分布式容錯特性能夠解決多數分布式集群調度問題。需要注意的是,Mesos應用于Docker集群時需要對Docker進行定制化修改,無疑提高了使用成本。
2.2容器集群的調度策略及其優化
其中Swarm為Docker客戶端提供API,從而保證Swarm集群中運行容器能像單個宿主機上運行容器那樣執行同樣的命令,以便借助Swarm集群進行任務調度。在客戶端請求Request發送到DockerSwarm時,Swarm會判斷請求中是否有限定條件,如果有則借助FilterChain模塊篩選出符合條件的節點,隨之根據既定策略把所有篩選出的節點排序,并選擇排名最高的節點作為調度執行節點。Swarm集群的調度策略主要包括3種[3]:隨機調度策略、密集型調度策略以及擴散型調度策略。顧名思義,隨機型調度策略會隨機選擇調度節點,實際應用中通常用作任務調度策略的調試,以便檢驗Swarm集群的連通性。密集型策略會根據不同集群節點的內存、CPU資源計算各節點的權重,在任務調度請求到達時會盡量將任務集中部署到一個節點上,當此節點無法再繼續接受任務時再選擇其他節點調度。擴散型策略在有調度請求時,會把每個調度請求均勻地分配到每個節點,以確保最大化利用每個節點的資源使用率。密集型調度策略以及擴散型調度策略在進行任務調度時,本質上都是利用集群中各節點的內存及CPU資源進行動態加權負載均衡,并沒有考慮各節點的網絡帶寬資源??梢砸源藶榍腥朦c對任務調度策略進行優化:計算各節點流入/流程網卡上的雙向流量占最大數據處理能力的比重,以此衡量單位時間內不同節點網絡資源的權重。在解決了容器集群負載均衡沒有考慮網絡資源的前提下,為了克服各資源的權重設置不合理的問題,可以為每種資源的權重引入一個二次調節因子,進而根據集群節點實時的負載情況動態調整權重。
3容器技術中的通信技術
3.1Docker容器的通信技術
容器的一大特性就是其資源隔離性,Docker容器借助NetworkNamespace實現了網絡設備、IP路由表等各種網絡資源的隔離。Docker容器自身并沒有網絡設備,在需要進行網絡通信時借助虛擬網橋以及Vethpair實現網絡虛擬化。Docker支持4種網絡模式[4]:(1)bridge模式。在bridge模式中,DockerDaemon創建一個網橋,并在創建容器時創建一組vethpair網絡設備對,用于容器和Docker宿主機的網絡通信;雖然實現了容器間的連通及隔離性,但是宿主機及容器間的網絡地址不在同一網段,即使NAT映射能夠實現宿主機和容器間的網絡傳輸,但在網絡負載時這種單一的方式會成為網絡及性能瓶頸。(2)host模式。容器中不創建與宿主機隔離的網絡環境,而是與宿主機共用各種網絡資源,可以直接與容器外部通信。(3)container模式。和已存在的容器共享網絡資源,但其他系統資源還是隔離的。(4)None模式。容器不進行任何網絡配置,用戶可以根據需求定制網絡。以上的網絡通信模式都存在各自的弊端,加之隨著Docker容器技術在云端的應用不斷增加,需要的網絡服務類型也更加多樣化,因此需要日益復雜的網絡設置,需要有完善的網絡Qos功能的支持,然而目前的Docker通信模塊中并不支持。為克服Docker容器在網絡通信上的不足之處,通常使用第三方工具來定制網絡通信方式,常用的網絡通信定制工具有[5]:(1)OpenvSwitch(OVS)。可以實現容器間的通信,并且其內置的Qos模塊可以很好的對網絡服務進行質量控制;然而,OVS是重量級的工具,不適合中小應用。(2)Flannel。雖然能夠為容器集群中的所有節點重新規劃并分配IP,但是部署相對復雜,大規模的集群節點會增加配置部署的復雜度;更重要的是并沒有Qos服務質量控制。(3)Linux系統內置的流量控制以及Cgroups。雖然具備Qos服務質量控制功能,但是創建容器時需要指定固定的大小,難以實現動態網絡控制,而且需要修改內核,擴展性相對較差。從上述分析可知,目前容器通信技術存在一定缺陷,各解決方案大多是針對特定應用場景,如果想要為容器提供完善的通信模式還需要進一步優化。
3.2Docker容器的通信優化
原生的Docker容器中對網絡通信資源的管理粒度較粗,為細化管理粒度,可以根據通信資源使用不同優先級的隊列,并進行自適應帶寬控制。實現方式是[6]:(1)指定容器的優先級。創建容器的時候,根據容器中運行應用的優先程度將其劃分為不同程度的優先級,高優先級的容器優,先被分配網絡資源。(2)創建優先級隊列。初始化時為每一優先級創建對應的隊列,以緩沖各自優先級的網絡流量。容器中應用發出的網絡流量會先緩存在對應優先級隊列中。(3)網絡流量處理。根據優先級依次處理各隊列中的網絡數據包,根據實際需要進行網絡地址轉換或數據轉發。通過上述優化,能夠保證關鍵服務使用較大的網絡帶寬,以此縮短其響應時間。另外,普通的應用也不會因為一直有關鍵服務運行而長時間饑餓等待,即使在業務規模大的時候,也能夠根據自適應調整獲取適當的通信資源。最重要的是還能夠根據實時的網絡資源使用情況動態調整資源的分配,提高通信性能。
4結語
本文對容器技術中的任務調度及通信技術進行研究,并分析對應的優化策略。在任務調度優化策略中,在進行動態加權負載均衡時增加了各節點的網絡帶寬資源因子,并為每種資源的權重引入一個二次調節因子,進而根據集群節點實時的負載情況動態調整權重。細化了網絡通信資源的管理粒度,方便容器中的應用根據網絡情況動態調整通信資源。
作者:楊林 單位:國網河南省電力公司焦作供電公司