本發(fā)明屬于計算機系統(tǒng)虛擬化技術(shù)領(lǐng)域,更具體地,涉及一種基于負(fù)載預(yù)測的dockerswarm集群資源調(diào)度優(yōu)化方法。
背景技術(shù):
docker自發(fā)布以來就立即在云計算領(lǐng)域引起了高度關(guān)注,社區(qū)異?;钴S,成為目前最炙手可熱開源軟件之一。業(yè)界巨頭如微軟、谷歌、ibm等紛紛與docker建立合作,并在各自相應(yīng)平臺上支持docker。docker的發(fā)展勢頭相當(dāng)迅猛。簡單地講,docker就是一個應(yīng)用程序運行容器,可將應(yīng)用及所有依賴打包進一個標(biāo)準(zhǔn)的單元中,如同集裝箱一樣。docker的功能類似虛擬機,但是要比虛擬機啟停更快、更加節(jié)省計算機的資源。
docker集群管理工具swarm的出現(xiàn)進一步促進了docker在集群中的使用,為云計算平臺及數(shù)據(jù)中心的虛擬化方法提供了一種新的思路。但是目前docker在下面兩個方面還存在一些問題:
1、docker的資源限制:
docker通過cgroup(控制組)來控制容器使用的資源配額,包括cpu、內(nèi)存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制。但目前docker只是用了cgroup的一部分子系統(tǒng),實現(xiàn)對資源配額和使用的控制。通常用法是在啟動一個容器時,通過設(shè)置權(quán)重或者上限等參數(shù),來達(dá)到資源控制的作用。在集群中,多個容器運行在一個節(jié)點上,它們之間的資源分配策略分為兩種:在資源利用不飽和時,各個容器盡最大努力使用資源,但受上限限制;而當(dāng)資源利用飽和時,即容器開始競爭資源,則按分配的權(quán)重來進行資源分配,也受到上限的限制。
這樣的資源調(diào)度方法在靈活性上有所欠缺,不能動態(tài)改變?nèi)萜鞯馁Y源權(quán)重和限制。這樣可能會造成資源浪費和缺乏反饋的資源競爭:在資源利用不飽和的時候,部分容器運行時需要更多的資源,但受到了資源上限的限制,沒有充分利用節(jié)點資源;在資源利用飽和時,有的容器對某些資源的需求比較大,但權(quán)重和上限都限制了它對資源的使用,而其他一些容器則對資源的需求不是很迫切,這時需要動態(tài)調(diào)整容器的資源權(quán)重和上限,達(dá)到總體提高容器運行性能的效果。
2、dockerswarm集群的調(diào)度策略:
目前swarm內(nèi)置的調(diào)度策略有三種,分別是random(隨機)、spread(擴散)和binpack(裝箱):random調(diào)度策略是隨機選擇容器生成的位置,一般用于調(diào)試集群;而用spread和binpack調(diào)度策略時,主要的依據(jù)是swarm統(tǒng)計出的每個物理節(jié)點的內(nèi)存和cpu的分配情況,其中,使用spread調(diào)度策略時,swarm會按照各個node節(jié)點的總的內(nèi)存和cpu的比例來使容器分散在每一個節(jié)點上;使用binpack調(diào)度策略時,swarm會先把一個node節(jié)點的資源使用完后,再將容器生成在其他可用的節(jié)點上。
目前使用的最多的就是spread策略,但它也存在著不足之處:在分配新容器時,只關(guān)注節(jié)點上的內(nèi)存和cpu占用比例,沒有考慮節(jié)點的i/o性能,也沒有考慮節(jié)點上容器的資源偏向特性,例如新容器是cpu密集型的,而正好有滿足條件的節(jié)點上面也都是cpu密集型容器,這樣就很可能在之后出現(xiàn)嚴(yán)重的cpu。理想的情況是節(jié)點上,有著各種資源偏向的容器,例如把cpu密集型和i/o密集型的容器放在一個節(jié)點上,這樣可以大大減少競爭資源的可能,并能提高節(jié)點的資源利用率。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種基于負(fù)載預(yù)測的dockerswarm集群資源調(diào)度優(yōu)化方法,其目的在于采取arima-rbf模型來對容器的資源歷史使用量進行建模預(yù)測,獲取資源未來使用量,集合資源目前使用情況對資源使用上限和資源使用權(quán)限進行調(diào)整;并根據(jù)容器的歷史資源使用量來確定容器對資源的使用;并在集群啟動一個新容器時根據(jù)該容器和滿足容器資源需求的節(jié)點集上的資源使用偏向程度,選擇一個加入該容器后資源使用偏向最均衡的節(jié)點來部署這個新容器,由此提高容器性能,提高了節(jié)點資源利用率和節(jié)點效益的作用。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種基于負(fù)載預(yù)測的dockerswarm集群資源調(diào)度優(yōu)化方法,所述方法包括:
(1)通過dockerdaemon的api接口函數(shù),周期性地收集容器的資源歷史使用量;
(2)對所述資源歷史使用量按時間序列后利用arima模型進行建模預(yù)測,得到容器資源未來使用量,再用rbf神經(jīng)網(wǎng)絡(luò)對預(yù)測結(jié)果的誤差進行建模預(yù)測,得到資源未來使用量的預(yù)測誤差,再將容器資源未來使用量和預(yù)測誤差結(jié)合,得到修正后容器資源未來使用量;
(3)將容器資源未來使用量、容器資源目前使用量和資源限制量進行對比后,進行動態(tài)調(diào)整容器對資源的限制量和容器對資源的權(quán)重;
(4)根據(jù)容器的資源歷史使用量確定容器對資源的使用偏向程度;
(5)分配容器到節(jié)點上時,根據(jù)容器對資源的使用偏向程度篩選出部署該容器的節(jié)點。
進一步地,其特征在于,所述步驟(1)具體為在集群的每個節(jié)點上,實時獲取每個容器的cpu、內(nèi)存和帶寬的歷史使用量,按時間排序并生成相應(yīng)的時間序列。
進一步地,其特征在于,所述步驟(2)具體包括:
(21)對所述資源歷史使用量按時間序列,再對資源歷史使用量的時間序列進行多次差分得到穩(wěn)定的時間序列;
(22)對穩(wěn)定的時間序列進行零均值化,再計算其自相關(guān)函數(shù)和偏自相關(guān)函數(shù)并識別出arima模型和估計參數(shù),計算出arima模型的階數(shù)和參數(shù);
(23)對arima模型進行有效性檢驗,通過檢驗后,利用該模型進行預(yù)測,得到容器的資源未來使用量;
(24)對比預(yù)測后一段時間內(nèi)容器的資源使用量和預(yù)測得到此段時間的資源未來使用量,得到預(yù)測誤差,使用rbf神經(jīng)網(wǎng)絡(luò)對誤差進行建模,得到誤差預(yù)測;
(25)將容器資源未來使用量和誤差預(yù)測結(jié)合,得到修正后容器資源未來使用量。
進一步地,其特征在于,所述步驟(3)具體包括:
(31)從容器s的r資源開始遍歷,檢查節(jié)點上r資源占用率是否飽和,若不飽和,進入步驟(32);否則進入步驟(33);
(32)比較容器s的rfuture和rnlimit,若rfuture大,則使rnlimit=rfuture;其中,rfuture表示容器的r資源未來使用量;rnlimit表示容器對r資源的限制量;進入步驟(34);
(33)檢測r資源的調(diào)度策略中是否有權(quán)重這一屬性,若沒有,則等待下一輪調(diào)度;否則比較容器s的rfuture、rcur和rnlimit,若rfuture>rcur=rnlimit,則使rnlimit=rfuture;其中,rcur表示容器的r資源當(dāng)前使用量;
(34)將rfuture與rnwgt/rallwgt·rall的比值記為
(35)將更新后的rnlimit和rnwgt,傳遞到dockerdaemon中。
進一步地,其特征在于,所述步驟(4)具體為:
容器對資源的使用偏向程度由偏向參數(shù)m確定,
其中,ε為資源閾值;ni為i時刻資源的使用率;p表示p個時刻;f()為指示函數(shù),若x>0時,則f(x)=1,否則f(x)=0;偏向參數(shù)m越大,說明該容器對資源越偏向。
進一步地,其特征在于,所述步驟(5)具體包括:
(51)在集群部署一個新的容器時,先檢測這個容器之前是否分析過資源偏向程度;若是則篩選出能夠運行該容器的節(jié)點集,計算節(jié)點集中所有節(jié)點的balance;
其中,mi是所有容器對資源i的偏向參數(shù)之和;
(52)選出balance最小的節(jié)點,作為部署節(jié)點。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)特征及有益效果:
(1)本發(fā)明技術(shù)方案使用了arima-rbf模型,可以根據(jù)容器的資源使用歷史,預(yù)測出未來的資源使用量,并及時調(diào)整各個容器的資源限制和權(quán)重,能夠起到提高容器性能的作用;
(2)本發(fā)明技術(shù)方案在集群中各個節(jié)點中分析出該節(jié)點的資源使用偏向,并將其資源使用偏向納入到容器調(diào)度策略中,盡量避免了容器在節(jié)點上的資源競爭,提高了節(jié)點資源利用率和節(jié)點效益的作用;
(3)本發(fā)明技術(shù)方案實時根據(jù)資源使用情況進行資源調(diào)度,具有容器資源調(diào)度實時性的優(yōu)點。
附圖說明
圖1是本發(fā)明技術(shù)方案集群級的功能示意圖;
圖2是本發(fā)明技術(shù)方案步驟(2)的流程圖;
圖3是本發(fā)明技術(shù)方案步驟(3)的流程圖;
圖4是本發(fā)明技術(shù)方案步驟(5)的流程圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
如圖1所示,本發(fā)明集群資源調(diào)度優(yōu)化方法包括以下步驟:
(1)通過dockerdaemon的api接口函數(shù),周期性地收集容器的資源歷史使用量;具體為在集群的每個節(jié)點上,實時獲取每個容器的cpu、內(nèi)存和帶寬的歷史使用量,按時間排序并生成相應(yīng)的時間序列。
(2)對所述資源歷史使用量按時間序列后利用arima模型進行建模預(yù)測,得到容器資源未來使用量,再用rbf神經(jīng)網(wǎng)絡(luò)對預(yù)測結(jié)果的誤差進行建模預(yù)測,得到資源未來使用量的預(yù)測誤差,再將容器資源未來使用量和預(yù)測誤差結(jié)合,得到修正后容器資源未來使用量;
如圖2所示為步驟(2)具體工作流程,具體包括:
(21)對所述資源歷史使用量按時間序列,再對資源歷史使用量的時間序列進行多次差分得到穩(wěn)定的時間序列;
(22)對穩(wěn)定的時間序列進行零均值化,再計算其自相關(guān)函數(shù)和偏自相關(guān)函數(shù)并識別出arima模型和估計參數(shù),計算出arima模型的階數(shù)和參數(shù);
(23)對arima模型進行有效性檢驗,通過檢驗后,利用該模型進行預(yù)測,得到容器的資源未來使用量;
(24)對比預(yù)測后一段時間內(nèi)容器的資源使用量和預(yù)測得到此段時間的資源未來使用量,得到預(yù)測誤差,使用rbf神經(jīng)網(wǎng)絡(luò)對誤差進行建模,得到誤差預(yù)測;
(25)將容器資源未來使用量和誤差預(yù)測結(jié)合,得到修正后容器資源未來使用量。
(3)將容器資源未來使用量、容器資源目前使用量和資源限制量進行對比后,進行動態(tài)調(diào)整容器對資源的限制量和容器對資源的權(quán)重;
如圖3所示為步驟(3)具體工作流程,具體包括:
(31)從容器s的r資源開始遍歷,檢查節(jié)點上r資源占用率是否飽和,若不飽和,進入步驟(32);否則進入步驟(33);
(32)比較容器s的rfuture和rnlimit,若rfuture大,則使rnlimit=rfuture;其中,rfuture表示容器的r資源未來使用量;rnlimit表示容器對r資源的限制量;進入步驟(34);
(33)檢測r資源的調(diào)度策略中是否有權(quán)重這一屬性,若沒有,則等待下一輪調(diào)度;否則比較容器s的rfuture、rcur和rnlimit,若rfuture>rcur=rnlimit,則使rnlimit=rfuture;其中,rcur表示容器的r資源當(dāng)前使用量;
(34)將rfuture與rnwgt/rallwgt·rall的比值記為
(35)將更新后的rnlimit和rnwgt,傳遞到dockerdaemon中。
(4)根據(jù)容器的資源歷史使用量來確定容器對資源的使用偏向程度;
具體為容器對資源的使用偏向程度由偏向參數(shù)m確定,
其中,ε為資源閾值,0<ε<1,ε=0.7;ni為i時刻資源的使用率;p表示取p個時刻;f()為指示函數(shù),若x>0時,則f(x)=1,否則f(x)=0;偏向參數(shù)m越大,說明該容器對資源越偏向。
(5)在集群管理器分配容器到節(jié)點上時,根據(jù)容器對資源的使用偏向程度篩選出部署該容器的節(jié)點;
如圖4所示為步驟(5)具體工作流程,具體包括:
(51)在集群部署一個新的容器時,先檢測這個容器之前是否分析過資源偏向;若有則篩選出能夠運行該容器的節(jié)點集,計算節(jié)點集中所有節(jié)點的balance;
其中,mi是所有容器對資源i的偏向參數(shù)之和;
(52)選出balance最小的節(jié)點,作為部署節(jié)點。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。