本發(fā)明屬于計算機云計算技術(shù)領(lǐng)域,具體涉及一種基于Docker云平臺的優(yōu)先級隊列動態(tài)反饋負(fù)載均衡資源調(diào)度方法。
背景技術(shù):
云計算將計算資源整理抽象成計算資源庫,然后將資源按量或按時計費,通過網(wǎng)絡(luò)提供給計算資源使用者。云計算通過分布式、虛擬化等多種技術(shù)的整合,將處理能力、存儲、網(wǎng)絡(luò)等資源抽象成可以作為服務(wù)提供給用戶的計算機資源,用戶可以根據(jù)需求,按時或者按量付費獲取,非常方便。
Docker容器技術(shù)具有輕量化、可配額和便攜化等優(yōu)點,非常適合用于開發(fā)PaaS云平臺,在今后的云計算發(fā)展中具有重要的地位。但是,以Docker為基礎(chǔ)的云平臺的原理和資源模型與傳統(tǒng)虛擬化平臺不同,不能直接使用虛擬機虛擬化的資源調(diào)度策略,因此需要根據(jù)以Docker為基礎(chǔ)的云平臺的資源特點設(shè)計主機資源調(diào)度策略。
負(fù)載均衡是比較常用的資源調(diào)度策略,負(fù)載均衡的基本思想就是讓所有的服務(wù)器的資源使用率接近,這樣可以有效的避免服務(wù)器空載造成的資源浪費,也可以防止服務(wù)器超載造成的業(yè)務(wù)癱瘓。通過監(jiān)控和計算服務(wù)器主機資源,將新分配的容器調(diào)度到資源使用率較低的服務(wù)器上,在適當(dāng)?shù)臅r候?qū)⑦^載的服務(wù)器上的容器調(diào)度到資源利用率低的空閑服務(wù)器上,從而保證資源利用率的均衡,保證云平臺的整體性能。
云計算常用的負(fù)載均衡算法有輪轉(zhuǎn)調(diào)度算法、加權(quán)輪轉(zhuǎn)調(diào)度算法、目標(biāo)地址哈希算法、源地址哈希算法、最小連接算法、啟發(fā)式算法等。
對于Docker云平臺宿主機不僅可以是不同配置的物理服務(wù)器,還可以是IaaS基礎(chǔ)設(shè)施,因此資源調(diào)度策略需要支持不同規(guī)格的服務(wù)器。其次Docker云平臺的調(diào)度粒度是容器,容器本身對資源的需求基本上是完全不同的,即Docker云平臺具有不同規(guī)格的用戶需求,因此資源調(diào)度策略要考慮不同規(guī)格用戶需求。另外,Docker云平臺中Docker啟動速度在秒級,因此資源調(diào)度策略的響應(yīng)時間過長,則資源調(diào)度策略的時間響應(yīng)度占主要矛盾,因此需要在保證負(fù)載均衡的同時,盡量減小調(diào)度算法的及計算量,以減小調(diào)度時間。已有資源調(diào)度策略不是難以解決用戶需求規(guī)格一致導(dǎo)致的負(fù)載不均衡問題,就是算法實現(xiàn)計算量大,負(fù)載均衡的時間響應(yīng)度低,無法保證實時動態(tài)調(diào)度,并且現(xiàn)有的資源調(diào)度策略大多是針對以虛擬機為基礎(chǔ)的云平臺,很少有在Docker容器的基礎(chǔ)上設(shè)計調(diào)度策略。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于,提供一種基于Docker云平臺的優(yōu)先級隊列動態(tài)反饋負(fù)載均衡資源調(diào)度方法,用以改進(jìn)現(xiàn)有的常規(guī)資源調(diào)度策略,并應(yīng)用于Docker云平臺。
本發(fā)明的技術(shù)方案是按以下方式實現(xiàn)的,對Docker云平臺主機資源建立數(shù)學(xué)模型,根據(jù)云平臺服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)綜合因素計算負(fù)載權(quán)值建立優(yōu)先級隊列,在此基礎(chǔ)上進(jìn)行動態(tài)反饋調(diào)度。該方法周期性的獲取負(fù)載情況作為反饋信息,通過一定的評價公式計算資源調(diào)度的優(yōu)先級,將不同優(yōu)先級的資源按調(diào)度優(yōu)先級排隊生成優(yōu)先級隊列,調(diào)度器再根據(jù)優(yōu)先級隊列進(jìn)行資源調(diào)度。
本發(fā)明是基于Docker云平臺的優(yōu)先級隊列動態(tài)反饋負(fù)載均衡資源調(diào)度方法,包括下列步驟:
(1)系統(tǒng)初始化
引入資源規(guī)格系數(shù)解決服務(wù)器規(guī)格不一,引入權(quán)值因子解決用戶需求不一。
①設(shè)置資源規(guī)格系數(shù):
對數(shù)據(jù)中心的n臺服務(wù)器的主機資源建立數(shù)學(xué)模型,由管理員設(shè)置規(guī)格系數(shù):cpui、memi、neti分別表示服務(wù)器CPU、內(nèi)存、網(wǎng)絡(luò)的性能差異,其中,下標(biāo)i為服務(wù)器標(biāo)識符,規(guī)格系數(shù)需要按比例設(shè)置,規(guī)格系數(shù)越高服務(wù)器具有更好的性能。如兩臺服務(wù)器的CPU分別是雙核和四核,則它們的規(guī)格系數(shù)可設(shè)置為cpu1為1,cpu2為2;
②設(shè)置每臺服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的權(quán)值因子λ1、λ2、λ3:
由于不同類型的Docker容器對資源的需求程度也不同,因此通過設(shè)置權(quán)值因子Λ(Λ=(λ1,λ2,λ3))來保證Docker容器對資源的需求程度不同時服務(wù)器的綜合負(fù)載性能。權(quán)值因子的設(shè)置需要根據(jù)容器需求,例如,若容器資源請求是計算占主導(dǎo)的,則適度調(diào)大cpu的權(quán)值因子λ1。
基于每臺服務(wù)器的歷史運行任務(wù)設(shè)置權(quán)值因子λ1、λ2、λ3的具體值,其中0=<λ1,λ2,λ3<=1且λ1+λ2+λ3=1。
③設(shè)置上閾值t1、下閾值t2,以及監(jiān)控周期,其中閾值t1、閾值t2基于n臺服務(wù)器的負(fù)載權(quán)值分布情況進(jìn)行預(yù)設(shè)。
(2)優(yōu)先級隊列的實現(xiàn)
根據(jù)各服務(wù)器的資源使用情況計算負(fù)載權(quán)值,由負(fù)載均值計算負(fù)載權(quán)值,并由此建立優(yōu)先級隊列。
①計算負(fù)載均值:
分別利用加權(quán)平均值計算CPU、內(nèi)存、網(wǎng)絡(luò)的負(fù)載均值:
其中Vc表示CPU的負(fù)載均值,lci表示第i臺服務(wù)器的CPU平均利用率,cpui表示第i臺服務(wù)器的CPU規(guī)格系數(shù)(按CPU的核的數(shù)量的比例設(shè)置CPU規(guī)格系數(shù)),i∈{1,2,…,n};
其中Vm表示內(nèi)存的負(fù)載均值,lmi表示第i臺服務(wù)器的內(nèi)存平均利用率,memi表示第i臺服務(wù)器的內(nèi)存規(guī)格系數(shù)(按內(nèi)存大小的比例設(shè)置內(nèi)存規(guī)格系數(shù)),i∈{1,2,…,n};
其中Vn表示網(wǎng)絡(luò)的負(fù)載均值,lneti表示第i臺服務(wù)器的網(wǎng)絡(luò)平均利用率,neti表示第i臺服務(wù)器的網(wǎng)絡(luò)規(guī)格系數(shù)(按網(wǎng)絡(luò)帶寬的比例設(shè)置網(wǎng)絡(luò)規(guī)格系數(shù)),i∈{1,2,…,n};
②計算均衡程度,即各臺服務(wù)器的資源相對比率:
將每臺服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的平均利用率與對應(yīng)的負(fù)載均值的比值分別作為各服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的相對負(fù)載率Ai(A∈{CPU,MEN,NET}):
即
當(dāng)計算得到的CPUi、MEMi、NETi的值大于1時,則表示系統(tǒng)的任務(wù)相對過載;小于1時表示系統(tǒng)的任務(wù)相對空閑;等于1時表示接近平均水平,通過CPUi、MEMi、NETi與數(shù)值1的大小關(guān)系來表示相對負(fù)載程度。
③計算每臺服務(wù)器的負(fù)載權(quán)值weighti:
weighti=λ1(ln CPUi)+λ2(lnMEMi)+λ3(lnNETi),其中符號“l(fā)n”表示自然對數(shù);
若負(fù)載權(quán)值weighti大于零,則表征服務(wù)器負(fù)載偏重,需要被調(diào)度;若weighti小于零則表示系統(tǒng)負(fù)載較輕,可以加入新任務(wù)。
④建立優(yōu)先級隊列:
根據(jù)各服務(wù)器的負(fù)載權(quán)值,確定各服務(wù)器的性能優(yōu)先級,負(fù)載權(quán)值越小,其性能優(yōu)先級越高;建立兩個優(yōu)先級隊列,一個是服務(wù)器性能優(yōu)先級隊列,一個是待調(diào)度服務(wù)器優(yōu)先級隊列;篩選出負(fù)載權(quán)值小于預(yù)設(shè)閾值t1的服務(wù)器,再按負(fù)載權(quán)值升序存儲到服務(wù)器性能優(yōu)先級隊列;篩選出負(fù)載均值大于預(yù)設(shè)閾值t2的服務(wù)器,再按負(fù)載權(quán)值降序存儲到待調(diào)度服務(wù)器優(yōu)先級隊列。
(2)動態(tài)反饋負(fù)載均衡調(diào)度策略:
通過周期性負(fù)載監(jiān)測,動態(tài)更新服務(wù)器負(fù)載權(quán)值,即當(dāng)檢測到用于計算負(fù)載權(quán)值的相關(guān)參數(shù)發(fā)生變化時,實時對服務(wù)器的負(fù)載權(quán)值進(jìn)行更新,如當(dāng)服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的平均利用率發(fā)生變化時,則需要重新計算對應(yīng)的weighti值;然后基于各服務(wù)器的當(dāng)前負(fù)載權(quán)值更新服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器性能優(yōu)先級隊列;
在查看待調(diào)度服務(wù)器優(yōu)先級隊列中是否有需要調(diào)度的服務(wù)器時(即待調(diào)度服務(wù)器優(yōu)先級隊列中存在服務(wù)器),則從位于待調(diào)度服務(wù)器優(yōu)先級隊列的隊頭的服務(wù)器上選擇一組或多組平均連接數(shù)最小的Docker容器進(jìn)行調(diào)度,將選擇的Docker容器調(diào)度到服務(wù)器性能優(yōu)先級隊列上動態(tài)性能最好的服務(wù)器上,即位于服務(wù)器性能優(yōu)先級隊列的隊頭的服務(wù)器;然后調(diào)整服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器優(yōu)先級隊列。
同時除了周期性負(fù)載監(jiān)控外,本發(fā)明可以通過新增容器或主機超載保護(hù)機制等外部事件觸發(fā)對指定Docker容器的調(diào)度,即將指定Docker容器調(diào)度到服務(wù)器性能優(yōu)先級隊列上性能最好的服務(wù)器上。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:利用建立的Docker云平臺主機資源的數(shù)學(xué)模型,動態(tài)計算服務(wù)器的權(quán)值,建立優(yōu)先級隊列,根據(jù)動態(tài)反饋進(jìn)行資源調(diào)度,本調(diào)度方法考慮服務(wù)器規(guī)格和用戶需求規(guī)格的不一致性,引入了多維資源的處理以及基于優(yōu)先級隊列的動態(tài)反饋的綜合負(fù)載均衡方法,保證了多維資源的綜合性能和調(diào)度方法實現(xiàn)效率。
附圖說明
圖1是優(yōu)先級隊列動態(tài)反饋負(fù)載均衡調(diào)度方法數(shù)據(jù)流圖;
圖2是觸發(fā)資源調(diào)度的方法圖;
圖3是基于Docker云平臺的動態(tài)反饋負(fù)載均衡資源調(diào)度系統(tǒng)組件圖;
圖4是動態(tài)反饋負(fù)載均衡流程圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合實施方式和附圖,對本發(fā)明作進(jìn)一步地詳細(xì)描述。
本發(fā)明是基于Docker云平臺的優(yōu)先級隊列動態(tài)反饋負(fù)載均衡資源調(diào)度方法。如圖1,該方法主要通過從數(shù)據(jù)庫讀取到的負(fù)載信息計算各服務(wù)器的負(fù)載權(quán)值,將服務(wù)器分成兩組,一組是權(quán)值大于零的高負(fù)載服務(wù)器組,另一組是權(quán)值小于零的低負(fù)載服務(wù)器組。對于分選出來的結(jié)果應(yīng)用不同的過濾器過濾不符合規(guī)則的服務(wù)器并建立相應(yīng)的優(yōu)先級隊列,對于低負(fù)載服務(wù)器應(yīng)用資源評估過濾資源情況異常的服務(wù)器并建立優(yōu)先級隊列1,而高負(fù)載服務(wù)器應(yīng)用負(fù)載評估過濾未達(dá)到調(diào)度閾值的服務(wù)器并建立優(yōu)先級隊列2,并將構(gòu)建的兩個優(yōu)先級隊列存儲到數(shù)據(jù)庫中。從優(yōu)先級隊列2中選出合適的容器調(diào)度到優(yōu)先級隊列1中權(quán)值最高的服務(wù)器上并更新數(shù)據(jù)庫。
主要結(jié)構(gòu)包括:優(yōu)先級隊列的建立和動態(tài)反饋負(fù)載均衡調(diào)度方法。
其中優(yōu)先級的實現(xiàn)主要通過建立的Docker云平臺主機資源模型,引入CPU、內(nèi)存、網(wǎng)絡(luò)規(guī)格系數(shù)和動態(tài)因子來消除服務(wù)器規(guī)格和用戶需求的不一致性,計算服務(wù)器的負(fù)載權(quán)值,據(jù)此建立兩個優(yōu)先級隊列便于后續(xù)資源調(diào)度方法的調(diào)度。
而動態(tài)反饋負(fù)載均衡調(diào)度方法通過資源監(jiān)控器周期的監(jiān)測負(fù)載的情況,負(fù)載反饋器會根據(jù)負(fù)載情況和歷史權(quán)值情況計算出評價服務(wù)器能力的負(fù)載權(quán)值。根據(jù)此負(fù)載權(quán)值計算出每個服務(wù)的性能優(yōu)先級和調(diào)度優(yōu)先級,根據(jù)這兩個優(yōu)先級建立兩個基于堆的優(yōu)先級隊列,然后負(fù)載均衡器依次順序進(jìn)行調(diào)度。具體描述如下:
1.優(yōu)先級隊列的實現(xiàn)
引入資源規(guī)格系數(shù)解決服務(wù)器規(guī)格不一,引入權(quán)值因子解決用戶需求不一,并根據(jù)負(fù)載均值計算負(fù)載權(quán)值,并由此建立優(yōu)先級隊列。
(1)建立Docker云平臺主機資源數(shù)學(xué)模型;
(2)分別計算CPU、內(nèi)存、網(wǎng)絡(luò)的負(fù)載均值:Vc、Vm、Vn;
(3)將每臺服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的平均利用率與對應(yīng)的負(fù)載均值的比值分別作為各服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)的相對負(fù)載率Ai(A∈{CPU,MEM,NET}),得到各服務(wù)器的均衡程度;
(4)根據(jù)公式weighti=λ1(ln CPUi)+λ2(lnMEMi)+λ3(lnNETi)計算每臺服務(wù)器的負(fù)載權(quán)值weighti,其中λ1、λ2、λ3分別為預(yù)設(shè)的CPU、內(nèi)存、網(wǎng)絡(luò)帶寬的權(quán)值因子,其中λ1+λ2+λ3=1。
(5)建立優(yōu)先級隊列:根據(jù)各服務(wù)器的負(fù)載權(quán)值,確定各服務(wù)器的性能優(yōu)先級,即負(fù)載權(quán)值越小,其性能優(yōu)先級越高;
然后建立兩個優(yōu)先級隊列,一個是服務(wù)器性能優(yōu)先級隊列,一個是待調(diào)度服務(wù)器優(yōu)先級隊列;篩選出負(fù)載權(quán)值小于0的服務(wù)器,再按負(fù)載權(quán)值升序存儲到服務(wù)器性能優(yōu)先級隊列;篩選出負(fù)載均值大于0的服務(wù)器,再按負(fù)載權(quán)值降序存儲到待調(diào)度服務(wù)器優(yōu)先級隊列。
優(yōu)先級隊列的基本操作包括插入和查找,本發(fā)明中中采用的優(yōu)先級隊列在調(diào)度時需要找到優(yōu)先級最高的元素,同時需要動態(tài)的建立隊列需要大量的插入操作。為了均衡算法復(fù)雜度,采用二叉堆的方式實現(xiàn)優(yōu)先級隊列,二叉堆的實現(xiàn)方式能夠保證插入和查找操作的復(fù)雜度都是O(log2n)。
圖2顯示了兩種觸發(fā)調(diào)度的方式,即基于周期監(jiān)控的服務(wù)器的負(fù)載權(quán)值對構(gòu)建的兩個優(yōu)先級隊列進(jìn)行更新,并觸發(fā)資源調(diào)度;由外部事件觸發(fā)資源調(diào)度。
2.動態(tài)反饋負(fù)載均衡調(diào)度方法
通過周期性負(fù)載監(jiān)測,動態(tài)更新服務(wù)器負(fù)載權(quán)值,然后將服務(wù)器按負(fù)載程度更新服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器性能優(yōu)先級隊列,在查看待調(diào)度服務(wù)器性能優(yōu)先級隊列中是否有需要調(diào)度的服務(wù)器,選擇一組或多組平均連接數(shù)最小的Docker容器進(jìn)行調(diào)度,將容器調(diào)度到服務(wù)器性能優(yōu)先級隊列上動態(tài)性能最好的服務(wù)器上,然后調(diào)整服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器性能優(yōu)先級隊列。同時除了周期性負(fù)載監(jiān)控外,本發(fā)明還可以通過新增容器或主機超載保護(hù)機制等外部事件觸發(fā),然后將任務(wù)調(diào)度到服務(wù)器性能優(yōu)先級隊列性能最好的服務(wù)器上。
實現(xiàn)本發(fā)明的動態(tài)反饋負(fù)載均衡調(diào)度方法的系統(tǒng)組件如圖3所示,圖中的調(diào)度器是實現(xiàn)負(fù)載均衡的核心單元,調(diào)度器主要負(fù)責(zé)給新加入隊列的任務(wù)(指新加入的Docker容器隊列,將Docker應(yīng)用容器作為資源分配的粒度,將一個Docker應(yīng)用容器作為一個調(diào)度任務(wù))分配服務(wù)器,為需要動態(tài)調(diào)整的容器組進(jìn)行動態(tài)遷移,從這兩方面實現(xiàn)負(fù)載均衡。負(fù)載監(jiān)控器主要負(fù)責(zé)周期性的獲取服務(wù)器主機的資源使用情況,從而計算各服務(wù)器的負(fù)載權(quán)值,并將服務(wù)器的負(fù)載權(quán)值提供給反饋控制器用于反饋控制決策,除此之外將一部分關(guān)鍵數(shù)據(jù)(比如上一次調(diào)度的響應(yīng)時間)存入歷史信息記錄模塊,以便在后續(xù)的時間進(jìn)行決策時提供給反饋控制器。反饋控制器通過計算將有用的反饋控制信息提供給負(fù)載均衡器,最后由負(fù)載均衡控制器決定調(diào)度的策略,最后將策略提供給調(diào)度器。
參見圖4,本發(fā)明的資源調(diào)度方法的執(zhí)行步驟如下:
①系統(tǒng)參數(shù)初始化,如初始化資源規(guī)格系數(shù)、權(quán)值因子、資源監(jiān)控周期T等參數(shù);
②通過設(shè)置的定時器,周期收集各服務(wù)器的負(fù)載信息,并記錄到數(shù)據(jù)庫中;
③計算各服務(wù)器資源負(fù)載加權(quán)平均值、資源相對比率、服務(wù)器負(fù)載權(quán)值,并基于服務(wù)器負(fù)載權(quán)值確定其性能優(yōu)先級,負(fù)載權(quán)值越小,性能優(yōu)先級越高;
④根據(jù)各服務(wù)器負(fù)載權(quán)值,建立/更新服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器優(yōu)先級隊列(若未建立,則建立,若已建立,則更新);
基于性能優(yōu)先級對服務(wù)器進(jìn)行過濾,過濾資源異常的服務(wù)器,如過濾掉前K個性能優(yōu)先級最小的服務(wù)器,或性能優(yōu)先級低于預(yù)設(shè)閾值t1的服務(wù)器等,將過濾后的各服務(wù)器按照負(fù)載權(quán)值升序存儲到服務(wù)器性能優(yōu)先級隊列;將性能優(yōu)先級低于預(yù)設(shè)閾值t2的服務(wù)器過濾后,按負(fù)載權(quán)值降序存儲到待調(diào)度服務(wù)器優(yōu)先級隊列。
⑤將服務(wù)器性能優(yōu)先級隊列和待調(diào)度服務(wù)器優(yōu)先級隊列加入負(fù)載均衡控制器;
⑥在負(fù)載均衡控制器控制驅(qū)動下,由調(diào)度器完成資源調(diào)度;
⑦同時任務(wù)調(diào)度可以由外部控制命令和事件觸發(fā)。
以上所述,僅為本發(fā)明的具體實施方式,本說明書中所公開的任一特征,除非特別敘述,均可被其他等效或具有類似目的替代特征加以替換;所公開的所有特征、或所有方法或過程中的步驟,除了互相排斥的特征和/或步驟以外,均可以任何方式組合。