曹成成, 李志聰
(哈爾濱師范大學 計算機科學與信息工程學院, 哈爾濱150025)
隨著云計算的發展,容器作為一種新的虛擬化技術,愈加得到重視,尤其是Docker 的出現更是讓容器成為重要研究課題之一[1-3]。 目前容器的編排技術仍存在資源利用率低,能耗較高的問題。
由于在云環境中,CPU 的能耗影響最大,所以大多數容器編排框架在容器的調度過程中都只考慮了CPU 的能耗,導致在一個異構的云環境中,容器請求的資源之間差異較大,僅考慮CPU 的利用率將會產生大量的資源浪費。 本文提出了一種多目標資源CMR(container multi-target resource)容器放置算法,根據虛擬機CPU、內存和帶寬的資源屬性值大小對虛擬機進行分類,把虛擬機分為計算型、內存型和帶寬型3 類,對容器也進行以上3 類劃分,算出容器最佳放置位置。
早期主要研究虛擬機與物理主機之間的協作關系,由于Docker 的盛行,容器與虛擬機在不同環境下的性能比較,容器的管理、應用等成為研究方向,研究獨立的Docker 容器相對于獨立虛擬機的性能開銷情況,結果表明管理容器技術上可能會帶來額外的開銷[4];有研究者采用新型的滲透算法研究微服務從云到霧、邊緣和物聯網(IoT)環境的遷移、部署和優化等[5]。
有好多高可用的容器集群[6],如Mesos 和Docker Swarm,其部署方式主要根據主機CPU 的利用率進行spread、binpack 和random 等策略進行放置,Kubernetes 作為目前容器編排框架的主流框架在編排過程中也只考慮到CPU 和內存的使用情況。早在虛擬機放置算法中,就有文獻介紹了基于能耗優化的多目標放置算法[7]。 將多種因素加入到容器的編排以減少能耗優化成為一個研究方向。
本文使用ContainerCloudSim 為容器云計算環境的建模和仿真提供了支持[8]。 ContainerCloudSim 中的MostFull、ListFull 和RandomSelection 對應Docker Swarm 調度的3 種策略:spread、binpack 和random。
由于虛擬機帶來的隔離機制,云環境采用在物理主機上搭建虛擬機,在虛擬機上搭建容器平臺的混合虛擬化建模方式,解決數據中心能耗高以及CPU、內存和帶寬三類資源總體利用率低等問題。
定 義 1主 機 列 表 Host = { h1, h2,…,hi,…,hn},其中一共有n 個主機,hi表示第i 個主機表示主機包含3 維資源,分別是CPU、內存和帶寬,定義為主機i 上的第j 維資源的大小,j =1,2,3;分別表示為
定義2數據中心Datacenter 資源計算如公式(1)所示。

定義Datacenterj為數據中心第j 維資源大小,j =1,2,3;即
定義3容器C ={c1,…,ct,…,cq},表示一共有q 個容器,ct表示第t 個容器,且為容器ct上第j 維資源,j =1,2,3;分別表示容器ct的CPU、內存、帶寬的資源大小。
定義4虛擬機,表示一共有m 臺虛擬機,其中vmk為第k 個虛擬機,且為第k 個虛擬機上的第j 維資源,j =1,2,3;分別表示虛擬機vmk的CPU、內存、帶寬的資源大小。
每個任務都與容器綁定,每個容器都會被放置到一臺合適的虛擬機上運行。 考慮到多目標的資源利用率,需要將容器放置到虛擬機剩余資源與容器資源最為吻合的虛擬機上。 為了解決以上問題,提出基于容器多目標資源利用率的放置算法來降低能耗。
傳統的放置算法中,只考慮在CPU 利用率情況下的能耗計算,可能會導致資源利用不均衡、資源浪費。 本文提出一種CMR 算法,考慮CPU 利用率、內存(RAM)和帶寬(BW)三種因素,對比虛擬機的剩余資源和容器的請求資源,選擇資源最匹配的虛擬機放置容器。 CMR 算法的具體過程:
步驟1虛擬機分類
根據數據中心的整體屬性,將虛擬機分為三類,即CPU 型、內存型和帶寬型。 由于CPU、內存和帶寬的資源屬性值各不相同,把虛擬機的剩余資源與數據中心對應資源屬性值做商,商值越大,說明資源占比重,故把商值最大的作為該虛擬機的類型。
定義6虛擬機vmk的第j 維資源剩余可分配空間spacek,j,如公式(2)所示。

定義7虛擬機vmk分類的指標VSk,j,其中j 表示虛擬機資源維數, 當j =1,2,3 時分別表示為CPU、內存和帶寬,虛擬機的總數為m,如公式(3)所示。

其中Datacenterj為數據中心的j 維資源大小,首先分別計算當j 等于1,2,3 時的分類指標VSk,j,其次比較V Sk,1,VSk,2,VSk,3,最大值的j 資源屬性作為vmk的類型。 例如:VSk,3為最大值,則j =3,即vmk的類型為帶寬型虛擬機。
步驟2容器分類
容器資源同樣有3 個維度,分別是CPU、內存和帶寬。 同樣與數據中心的各個資源屬性值做比,根據比值來判斷容器屬于哪一類。
定義8容器ct分類的指標CSt,j, 如公式(4)所示。

CSt,j表示ct的第j 維屬性與Datacenter 的第j 維屬性的比值,比較CSt,1,CSt,2,CSt,3,選擇出最大的值,其資源屬性作為ct的類型。
步驟3容器放置
虛擬機vmk和容器ct都完成類型分類后,放置容器到同類型的虛擬機上。 分別在j =1,2,3 時,計算ct放置到vmk的屬性適應值列表為Valuek,j, 如公式(5)所示。

其中m′表示與ct相同類型vmk的個數。 計算容器放置到vmk上的總適應值SVk, 如公式(6)所示。

取 得SVk最 大 值 所 對 應 的k′ 值, 即{k′:max(SVk) ,k′ =1,2,…,m′},則該vmk′作為容器ct將要放置的虛擬機。
經過以上三步驟計算后,選出與容器資源匹配度最高的虛擬機進行容器放置,充分使容器和虛擬機的剩余資源相契合,達到CPU、內存、帶寬充分利用的效果。 資源充分利用,從而降低能耗。
算法CMR 描述:
輸入q 個容器C ={c1,…,ct,…,cq},m 個虛擬機
輸出容器ct放置到虛擬機vmk的列表:list ={ <c1,vma>, <c2,vmb>,6…, <ct,vmi>,…, <cq,vmj>}。
步驟1初始化容器位置標識t =1,list =null;
步驟2k =1,計算vmk的剩余資源spacek,j,獲得虛擬機分類指標VSk,j,k =k +1,重復步驟2,直到k =m;
步驟3初始化SVk=0,maxSV =0,selectVM =null,虛擬機位置標識k =1;
步驟4根據VSk,j虛擬機分類,獲得虛擬機分類列表VMcpu,VMram,VMbw;
步驟5計算容器ct分類指標CSt,j,判斷容器類型;
步驟6根據容器類型選擇同類型虛擬機列表
步驟7計算SVk大小,如果SVk> maxSV,maxSV =SVk,selectVM =vmk;
步驟8如果k <m,k =k +1,返回步驟4;
步驟9向list 中加入<ct,selectVm >;
步驟10如果t <q,t =t +1,轉為步驟2;
步驟11算法結束,輸出list ={ <c1,vma>,<c2,vmb>,…, <ct,vmi>,…, <cq,vmj>}。
CMR 算法的時間復雜度主要體現在容器的放置過程中,同樣設容器的總數為n,虛擬機的個數為m,為每個容器選擇最佳放置位置時,需要遍歷一次虛擬機列表,對虛擬機進行分類。 在計算容器與虛擬機的最佳適應度時,需要再遍歷一次虛擬機列表。放置整個容器列表的迭代次數為O(n × 2m),所以CMR 算法的時間復雜度為O(N2)。
實驗使用云模擬工具包CloudSim4.0 作為容器服務的提供者。 基于CloudSim4.0 中Container 模塊,擴展了容器放置策略進行實驗,選用3 組異構的服務器搭建數據中心。 為評估上述算法,CPU 負載采用了來自PlanetLab 的工作負載文件。 這些負載文件為測試機器收集的隨機選擇的10 天工作負載。每個容器被分配一個工作負載,該工作負載包含一天的CPU 利用率數據,每5 分鐘報告一次。 不失一般性,容器的內存、帶寬大小根據一定的范圍隨機生成。 服務主機和虛擬機配置如表1 和表2 所示。
其中,CPU 的能耗模型采用了與服務器配置相對應的功率模型,分別是HP ProLiant ML110 G4、IBM server x3250、IBM server x3550[9]。

表1 服務主機配置Tab.1 Service configuration

表2 虛擬機配置Tab.2 Virtual Machine Configuration
利用三組實驗來驗證CMR 算法,每組實驗重復多次,取所有實驗數據的平均值作為最終實驗結果。
實驗首先對比了CMR 算法與FistFit、MostFull、LeastFull、RandomSelection 四種算法在三組級別的數據中心的總能耗,如圖1 所示。 其次分別對比了CPU、內存和帶寬隨著數據中心量級的改變所帶來的能耗變化情況,其中CPU 能耗的比較如圖2 所示,內存成本的比較如圖3 所示,帶寬成本的比較如圖4 所示。 實驗的CPU 負載采用了來自PlanetLab的工作負載文件,內存和帶寬采用了滿載的策略。

圖1 數據中心總能耗對比圖Fig.1 Comparison chart of total energy consumption in data center

圖2 CMR 算法CPU 對比Fig.2 CPU contrast of CIR

圖3 CMR 算法RAM 對比Fig.3 RAM contrast of CIR

圖4 CMR 算法帶寬對比Fig.4 BW Contrast of CIR
從圖1 可以看出,5 種算法第一組數據中心中能耗對比不太明顯,在第3 組數據中心中可以清晰的看出每個算法的優劣,其中LF 算法的能耗最高,而CMR 算法能耗最低,其他3 種算法的總能耗較為均衡。 CMR算法在3 組數據中心能耗的比較中,相比于其他四種算法能耗平均降低28.6%,在數據中心主機達到100臺時,CMR 算法相比其他算法能耗平均降低43.6%。
從圖2 可以看出在CPU 能耗方面FF、MF、RS這3 種算法在不同級別的數據中心中的能耗都比較接近。 FF 算法隨著主機數的增加,能耗也有所降低,LF 能耗最高,而CMR 算法比其他4 個算法的CPU 能耗都要低。 單從CPU 方面來看,能耗比其他四種算法平均降低了34.0%。
在主機數量只有25 臺時,五種算法并沒有明顯的優劣,但隨著主機數量的增加,CMR 的算法的優勢便得以體現。 在圖3 和圖4 的內存和帶寬的能耗比較圖中也可以看出,兩種資源的變化曲線對比較為接近。 在總體趨勢上和CPU 的能耗變化曲線也比較接近,隨著數據中心主機數量的增加,能耗優化越明顯。 總體來說,CMR 算法相比于其他算法的內存平均能耗降低33.8%,帶寬能耗平均降低26.5%。3 種不同類型的資源能耗同時降低也比較符合預期,達到了利用CMR 算法提高三種資源的利用率來降低總體能耗的目的。
基于容器多目標資源的放置算法CMR 對比FF、LF、MF 和RS 算法能夠在充分利用數據中心CPU、內存和帶寬資源的同時,降低各個屬性帶來的能耗。 從實驗結果可以看出,CPU、內存和帶寬三種資源的能耗都能得到降低,其中CPU 資源能耗降低最為明顯。
未來將在算法的優化、時間復雜度以及容器鏡像復用等方面做更進一步的研究,并且將容器鏡像復用、多目標的思想運用到容器的遷移等方面。