曹成成, 李志聰
(哈爾濱師范大學(xué) 計(jì)算機(jī)科學(xué)與信息工程學(xué)院, 哈爾濱150025)
隨著云計(jì)算的發(fā)展,容器作為一種新的虛擬化技術(shù),愈加得到重視,尤其是Docker 的出現(xiàn)更是讓容器成為重要研究課題之一[1-3]。 目前容器的編排技術(shù)仍存在資源利用率低,能耗較高的問(wèn)題。
由于在云環(huán)境中,CPU 的能耗影響最大,所以大多數(shù)容器編排框架在容器的調(diào)度過(guò)程中都只考慮了CPU 的能耗,導(dǎo)致在一個(gè)異構(gòu)的云環(huán)境中,容器請(qǐng)求的資源之間差異較大,僅考慮CPU 的利用率將會(huì)產(chǎn)生大量的資源浪費(fèi)。 本文提出了一種多目標(biāo)資源CMR(container multi-target resource)容器放置算法,根據(jù)虛擬機(jī)CPU、內(nèi)存和帶寬的資源屬性值大小對(duì)虛擬機(jī)進(jìn)行分類,把虛擬機(jī)分為計(jì)算型、內(nèi)存型和帶寬型3 類,對(duì)容器也進(jìn)行以上3 類劃分,算出容器最佳放置位置。
早期主要研究虛擬機(jī)與物理主機(jī)之間的協(xié)作關(guān)系,由于Docker 的盛行,容器與虛擬機(jī)在不同環(huán)境下的性能比較,容器的管理、應(yīng)用等成為研究方向,研究獨(dú)立的Docker 容器相對(duì)于獨(dú)立虛擬機(jī)的性能開(kāi)銷情況,結(jié)果表明管理容器技術(shù)上可能會(huì)帶來(lái)額外的開(kāi)銷[4];有研究者采用新型的滲透算法研究微服務(wù)從云到霧、邊緣和物聯(lián)網(wǎng)(IoT)環(huán)境的遷移、部署和優(yōu)化等[5]。
有好多高可用的容器集群[6],如Mesos 和Docker Swarm,其部署方式主要根據(jù)主機(jī)CPU 的利用率進(jìn)行spread、binpack 和random 等策略進(jìn)行放置,Kubernetes 作為目前容器編排框架的主流框架在編排過(guò)程中也只考慮到CPU 和內(nèi)存的使用情況。早在虛擬機(jī)放置算法中,就有文獻(xiàn)介紹了基于能耗優(yōu)化的多目標(biāo)放置算法[7]。 將多種因素加入到容器的編排以減少能耗優(yōu)化成為一個(gè)研究方向。
本文使用ContainerCloudSim 為容器云計(jì)算環(huán)境的建模和仿真提供了支持[8]。 ContainerCloudSim 中的MostFull、ListFull 和RandomSelection 對(duì)應(yīng)Docker Swarm 調(diào)度的3 種策略:spread、binpack 和random。
由于虛擬機(jī)帶來(lái)的隔離機(jī)制,云環(huán)境采用在物理主機(jī)上搭建虛擬機(jī),在虛擬機(jī)上搭建容器平臺(tái)的混合虛擬化建模方式,解決數(shù)據(jù)中心能耗高以及CPU、內(nèi)存和帶寬三類資源總體利用率低等問(wèn)題。
定 義 1主 機(jī) 列 表 Host = { h1, h2,…,hi,…,hn},其中一共有n 個(gè)主機(jī),hi表示第i 個(gè)主機(jī)表示主機(jī)包含3 維資源,分別是CPU、內(nèi)存和帶寬,定義為主機(jī)i 上的第j 維資源的大小,j =1,2,3;分別表示為
定義2數(shù)據(jù)中心Datacenter 資源計(jì)算如公式(1)所示。
定義Datacenterj為數(shù)據(jù)中心第j 維資源大小,j =1,2,3;即
定義3容器C ={c1,…,ct,…,cq},表示一共有q 個(gè)容器,ct表示第t 個(gè)容器,且為容器ct上第j 維資源,j =1,2,3;分別表示容器ct的CPU、內(nèi)存、帶寬的資源大小。
定義4虛擬機(jī),表示一共有m 臺(tái)虛擬機(jī),其中vmk為第k 個(gè)虛擬機(jī),且為第k 個(gè)虛擬機(jī)上的第j 維資源,j =1,2,3;分別表示虛擬機(jī)vmk的CPU、內(nèi)存、帶寬的資源大小。
每個(gè)任務(wù)都與容器綁定,每個(gè)容器都會(huì)被放置到一臺(tái)合適的虛擬機(jī)上運(yùn)行。 考慮到多目標(biāo)的資源利用率,需要將容器放置到虛擬機(jī)剩余資源與容器資源最為吻合的虛擬機(jī)上。 為了解決以上問(wèn)題,提出基于容器多目標(biāo)資源利用率的放置算法來(lái)降低能耗。
傳統(tǒng)的放置算法中,只考慮在CPU 利用率情況下的能耗計(jì)算,可能會(huì)導(dǎo)致資源利用不均衡、資源浪費(fèi)。 本文提出一種CMR 算法,考慮CPU 利用率、內(nèi)存(RAM)和帶寬(BW)三種因素,對(duì)比虛擬機(jī)的剩余資源和容器的請(qǐng)求資源,選擇資源最匹配的虛擬機(jī)放置容器。 CMR 算法的具體過(guò)程:
步驟1虛擬機(jī)分類
根據(jù)數(shù)據(jù)中心的整體屬性,將虛擬機(jī)分為三類,即CPU 型、內(nèi)存型和帶寬型。 由于CPU、內(nèi)存和帶寬的資源屬性值各不相同,把虛擬機(jī)的剩余資源與數(shù)據(jù)中心對(duì)應(yīng)資源屬性值做商,商值越大,說(shuō)明資源占比重,故把商值最大的作為該虛擬機(jī)的類型。
定義6虛擬機(jī)vmk的第j 維資源剩余可分配空間spacek,j,如公式(2)所示。
定義7虛擬機(jī)vmk分類的指標(biāo)VSk,j,其中j 表示虛擬機(jī)資源維數(shù), 當(dāng)j =1,2,3 時(shí)分別表示為CPU、內(nèi)存和帶寬,虛擬機(jī)的總數(shù)為m,如公式(3)所示。
其中Datacenterj為數(shù)據(jù)中心的j 維資源大小,首先分別計(jì)算當(dāng)j 等于1,2,3 時(shí)的分類指標(biāo)VSk,j,其次比較V Sk,1,VSk,2,VSk,3,最大值的j 資源屬性作為vmk的類型。 例如:VSk,3為最大值,則j =3,即vmk的類型為帶寬型虛擬機(jī)。
步驟2容器分類
容器資源同樣有3 個(gè)維度,分別是CPU、內(nèi)存和帶寬。 同樣與數(shù)據(jù)中心的各個(gè)資源屬性值做比,根據(jù)比值來(lái)判斷容器屬于哪一類。
定義8容器ct分類的指標(biāo)CSt,j, 如公式(4)所示。
CSt,j表示ct的第j 維屬性與Datacenter 的第j 維屬性的比值,比較CSt,1,CSt,2,CSt,3,選擇出最大的值,其資源屬性作為ct的類型。
步驟3容器放置
虛擬機(jī)vmk和容器ct都完成類型分類后,放置容器到同類型的虛擬機(jī)上。 分別在j =1,2,3 時(shí),計(jì)算ct放置到vmk的屬性適應(yīng)值列表為Valuek,j, 如公式(5)所示。
其中m′表示與ct相同類型vmk的個(gè)數(shù)。 計(jì)算容器放置到vmk上的總適應(yīng)值SVk, 如公式(6)所示。
取 得SVk最 大 值 所 對(duì) 應(yīng) 的k′ 值, 即{k′:max(SVk) ,k′ =1,2,…,m′},則該vmk′作為容器ct將要放置的虛擬機(jī)。
經(jīng)過(guò)以上三步驟計(jì)算后,選出與容器資源匹配度最高的虛擬機(jī)進(jìn)行容器放置,充分使容器和虛擬機(jī)的剩余資源相契合,達(dá)到CPU、內(nèi)存、帶寬充分利用的效果。 資源充分利用,從而降低能耗。
算法CMR 描述:
輸入q 個(gè)容器C ={c1,…,ct,…,cq},m 個(gè)虛擬機(jī)
輸出容器ct放置到虛擬機(jī)vmk的列表:list ={ <c1,vma>, <c2,vmb>,6…, <ct,vmi>,…, <cq,vmj>}。
步驟1初始化容器位置標(biāo)識(shí)t =1,list =null;
步驟2k =1,計(jì)算vmk的剩余資源spacek,j,獲得虛擬機(jī)分類指標(biāo)VSk,j,k =k +1,重復(fù)步驟2,直到k =m;
步驟3初始化SVk=0,maxSV =0,selectVM =null,虛擬機(jī)位置標(biāo)識(shí)k =1;
步驟4根據(jù)VSk,j虛擬機(jī)分類,獲得虛擬機(jī)分類列表VMcpu,VMram,VMbw;
步驟5計(jì)算容器ct分類指標(biāo)CSt,j,判斷容器類型;
步驟6根據(jù)容器類型選擇同類型虛擬機(jī)列表
步驟7計(jì)算SVk大小,如果SVk> maxSV,maxSV =SVk,selectVM =vmk;
步驟8如果k <m,k =k +1,返回步驟4;
步驟9向list 中加入<ct,selectVm >;
步驟10如果t <q,t =t +1,轉(zhuǎn)為步驟2;
步驟11算法結(jié)束,輸出list ={ <c1,vma>,<c2,vmb>,…, <ct,vmi>,…, <cq,vmj>}。
CMR 算法的時(shí)間復(fù)雜度主要體現(xiàn)在容器的放置過(guò)程中,同樣設(shè)容器的總數(shù)為n,虛擬機(jī)的個(gè)數(shù)為m,為每個(gè)容器選擇最佳放置位置時(shí),需要遍歷一次虛擬機(jī)列表,對(duì)虛擬機(jī)進(jìn)行分類。 在計(jì)算容器與虛擬機(jī)的最佳適應(yīng)度時(shí),需要再遍歷一次虛擬機(jī)列表。放置整個(gè)容器列表的迭代次數(shù)為O(n × 2m),所以CMR 算法的時(shí)間復(fù)雜度為O(N2)。
實(shí)驗(yàn)使用云模擬工具包CloudSim4.0 作為容器服務(wù)的提供者。 基于CloudSim4.0 中Container 模塊,擴(kuò)展了容器放置策略進(jìn)行實(shí)驗(yàn),選用3 組異構(gòu)的服務(wù)器搭建數(shù)據(jù)中心。 為評(píng)估上述算法,CPU 負(fù)載采用了來(lái)自PlanetLab 的工作負(fù)載文件。 這些負(fù)載文件為測(cè)試機(jī)器收集的隨機(jī)選擇的10 天工作負(fù)載。每個(gè)容器被分配一個(gè)工作負(fù)載,該工作負(fù)載包含一天的CPU 利用率數(shù)據(jù),每5 分鐘報(bào)告一次。 不失一般性,容器的內(nèi)存、帶寬大小根據(jù)一定的范圍隨機(jī)生成。 服務(wù)主機(jī)和虛擬機(jī)配置如表1 和表2 所示。
其中,CPU 的能耗模型采用了與服務(wù)器配置相對(duì)應(yīng)的功率模型,分別是HP ProLiant ML110 G4、IBM server x3250、IBM server x3550[9]。
表1 服務(wù)主機(jī)配置Tab.1 Service configuration
表2 虛擬機(jī)配置Tab.2 Virtual Machine Configuration
利用三組實(shí)驗(yàn)來(lái)驗(yàn)證CMR 算法,每組實(shí)驗(yàn)重復(fù)多次,取所有實(shí)驗(yàn)數(shù)據(jù)的平均值作為最終實(shí)驗(yàn)結(jié)果。
實(shí)驗(yàn)首先對(duì)比了CMR 算法與FistFit、MostFull、LeastFull、RandomSelection 四種算法在三組級(jí)別的數(shù)據(jù)中心的總能耗,如圖1 所示。 其次分別對(duì)比了CPU、內(nèi)存和帶寬隨著數(shù)據(jù)中心量級(jí)的改變所帶來(lái)的能耗變化情況,其中CPU 能耗的比較如圖2 所示,內(nèi)存成本的比較如圖3 所示,帶寬成本的比較如圖4 所示。 實(shí)驗(yàn)的CPU 負(fù)載采用了來(lái)自PlanetLab的工作負(fù)載文件,內(nèi)存和帶寬采用了滿載的策略。
圖1 數(shù)據(jù)中心總能耗對(duì)比圖Fig.1 Comparison chart of total energy consumption in data center
圖2 CMR 算法CPU 對(duì)比Fig.2 CPU contrast of CIR
圖3 CMR 算法RAM 對(duì)比Fig.3 RAM contrast of CIR
圖4 CMR 算法帶寬對(duì)比Fig.4 BW Contrast of CIR
從圖1 可以看出,5 種算法第一組數(shù)據(jù)中心中能耗對(duì)比不太明顯,在第3 組數(shù)據(jù)中心中可以清晰的看出每個(gè)算法的優(yōu)劣,其中LF 算法的能耗最高,而CMR 算法能耗最低,其他3 種算法的總能耗較為均衡。 CMR算法在3 組數(shù)據(jù)中心能耗的比較中,相比于其他四種算法能耗平均降低28.6%,在數(shù)據(jù)中心主機(jī)達(dá)到100臺(tái)時(shí),CMR 算法相比其他算法能耗平均降低43.6%。
從圖2 可以看出在CPU 能耗方面FF、MF、RS這3 種算法在不同級(jí)別的數(shù)據(jù)中心中的能耗都比較接近。 FF 算法隨著主機(jī)數(shù)的增加,能耗也有所降低,LF 能耗最高,而CMR 算法比其他4 個(gè)算法的CPU 能耗都要低。 單從CPU 方面來(lái)看,能耗比其他四種算法平均降低了34.0%。
在主機(jī)數(shù)量只有25 臺(tái)時(shí),五種算法并沒(méi)有明顯的優(yōu)劣,但隨著主機(jī)數(shù)量的增加,CMR 的算法的優(yōu)勢(shì)便得以體現(xiàn)。 在圖3 和圖4 的內(nèi)存和帶寬的能耗比較圖中也可以看出,兩種資源的變化曲線對(duì)比較為接近。 在總體趨勢(shì)上和CPU 的能耗變化曲線也比較接近,隨著數(shù)據(jù)中心主機(jī)數(shù)量的增加,能耗優(yōu)化越明顯。 總體來(lái)說(shuō),CMR 算法相比于其他算法的內(nèi)存平均能耗降低33.8%,帶寬能耗平均降低26.5%。3 種不同類型的資源能耗同時(shí)降低也比較符合預(yù)期,達(dá)到了利用CMR 算法提高三種資源的利用率來(lái)降低總體能耗的目的。
基于容器多目標(biāo)資源的放置算法CMR 對(duì)比FF、LF、MF 和RS 算法能夠在充分利用數(shù)據(jù)中心CPU、內(nèi)存和帶寬資源的同時(shí),降低各個(gè)屬性帶來(lái)的能耗。 從實(shí)驗(yàn)結(jié)果可以看出,CPU、內(nèi)存和帶寬三種資源的能耗都能得到降低,其中CPU 資源能耗降低最為明顯。
未來(lái)將在算法的優(yōu)化、時(shí)間復(fù)雜度以及容器鏡像復(fù)用等方面做更進(jìn)一步的研究,并且將容器鏡像復(fù)用、多目標(biāo)的思想運(yùn)用到容器的遷移等方面。