本發(fā)明涉及云計(jì)算技術(shù)領(lǐng)域,特別涉及一種基于docker容器集群的智能彈性伸縮方法。
背景技術(shù):
互聯(lián)網(wǎng)的發(fā)展日新月異,在推動(dòng)集群技術(shù)、分布式計(jì)算和云計(jì)算等技術(shù)快速發(fā)展的同時(shí),也深深改變了人們的日常生活。越來(lái)越多的應(yīng)用和服務(wù)(例如口戶(hù)網(wǎng)站、電商網(wǎng)站、社交服務(wù)等等)都圍繞網(wǎng)絡(luò)展開(kāi)。人們的生活越來(lái)越離不開(kāi)互聯(lián)網(wǎng),從而導(dǎo)致互聯(lián)網(wǎng)用戶(hù)數(shù)量激增以及網(wǎng)絡(luò)上的流量爆炸式膨脹。當(dāng)集群面臨工作負(fù)載量過(guò)大的情況時(shí),用戶(hù)端的直觀體驗(yàn)往往是點(diǎn)擊了某網(wǎng)站或者請(qǐng)求某服務(wù)而一直不能加載成功,導(dǎo)致的結(jié)果就是請(qǐng)求響應(yīng)時(shí)間變長(zhǎng),極有可能導(dǎo)致構(gòu)建服務(wù)的集群不堪重負(fù)而癱瘓。
針對(duì)頻繁、大量的負(fù)載變化,在現(xiàn)階段可以通過(guò)調(diào)整集群的性能來(lái)為集群與工作負(fù)載的動(dòng)態(tài)關(guān)系提供一種普適性的解決方案,即集群的伸縮方法。例如増強(qiáng)集群性能,一方面可以通過(guò)提升集群里每臺(tái)服務(wù)器的性能來(lái)完成,從而處理更大的工作負(fù)載。但這種方式仍然具有局限性,因?yàn)閱闻_(tái)服務(wù)器的性能總有上限,所以集群的總體性能也有上限,當(dāng)工作負(fù)載持續(xù)不斷變大時(shí),集群的性能問(wèn)題依然存在。另一方面,可以通過(guò)増加適當(dāng)數(shù)量的服務(wù)器、擴(kuò)大集群的容量來(lái)提升集群的總體性能。這種方式操作簡(jiǎn)便、靈活,成本相對(duì)前一種方式較低廉。它的優(yōu)點(diǎn)是,在條件允許的情況下,集群規(guī)模理論上可以無(wú)限大。
在面對(duì)動(dòng)態(tài)的負(fù)載變化時(shí),一方面,需要盡量減少用戶(hù)請(qǐng)求的等待時(shí)間,以保證服務(wù)質(zhì)量。另一方面,由于現(xiàn)在多數(shù)云環(huán)境采用虛擬機(jī)作為基本單位,虛擬機(jī)從啟動(dòng)到部署生效需要經(jīng)過(guò)分鐘級(jí)的時(shí)間,在某些場(chǎng)景里,當(dāng)擴(kuò)容的集群剛生效或生效不久的時(shí)候,工作負(fù)載已經(jīng)回歸到正常水平,擴(kuò)容的虛擬機(jī)便處于相對(duì)空閑的狀態(tài),因此擴(kuò)展啟動(dòng)的虛擬機(jī)并未最大化它們的價(jià)值,這造成了不要的開(kāi)銷(xiāo)浪費(fèi)。因此,如何減少用戶(hù)請(qǐng)求的等待時(shí)間及減少伸縮調(diào)整的時(shí)間開(kāi)銷(xiāo)變得非常關(guān)鍵。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明通過(guò)對(duì)現(xiàn)有集群伸縮方法的改進(jìn),結(jié)合對(duì)上述伸縮過(guò)程中存在問(wèn)題的原因分析,借助新興的docker容器技術(shù),提出了一種基于docker容器集群的智能伸縮方法,在工作負(fù)載突發(fā)式增長(zhǎng)的情況下,采用實(shí)時(shí)響應(yīng)式伸縮擴(kuò)容;在周期性負(fù)載增長(zhǎng)的情況下,則采用預(yù)測(cè)式伸縮擴(kuò)容。且在工作負(fù)載較低的情形里,對(duì)集群進(jìn)行收縮。最終可以達(dá)到依賴(lài)工作負(fù)載變化情況對(duì)集群進(jìn)行動(dòng)態(tài)的伸縮調(diào)整,并最終達(dá)到減少用戶(hù)請(qǐng)求等待時(shí)間、提高系統(tǒng)性能的目標(biāo)。通過(guò)預(yù)測(cè)方法來(lái)提前做好伸縮調(diào)整,并根據(jù)實(shí)時(shí)監(jiān)測(cè)的負(fù)載情況來(lái)修正伸縮,讓伸縮變得更加智能、理性。
基于docker容器集群的智能彈性伸縮方法,其特征在于,包括以下步驟:
監(jiān)控并采樣數(shù)據(jù),
1-1、每臺(tái)主機(jī)中的子監(jiān)控模塊對(duì)所述主機(jī)的運(yùn)行狀態(tài)和參數(shù)進(jìn)行監(jiān)控,將定時(shí)采集到的數(shù)據(jù)發(fā)送至總監(jiān)控模塊;
1-2、總監(jiān)控模塊匯總所述數(shù)據(jù),發(fā)送到歷史負(fù)載表、近期負(fù)載表和規(guī)則伸縮報(bào)警器;
數(shù)據(jù)預(yù)測(cè)分析,
2-1.對(duì)所述歷史負(fù)載表中的負(fù)載數(shù)據(jù)進(jìn)行采樣、加權(quán)、分類(lèi)等預(yù)處理;
2-2.將預(yù)處理后的歷史負(fù)載數(shù)據(jù)代入預(yù)測(cè)模型,對(duì)未來(lái)的工作負(fù)載值進(jìn)行預(yù)測(cè);
執(zhí)行伸縮算法,
3-1.基于步驟1-2的結(jié)果,獲得當(dāng)前負(fù)載;如果當(dāng)前負(fù)載大于預(yù)設(shè)的負(fù)載閾值上限的1.1倍或小于負(fù)載閾值下限的0.9倍,則觸發(fā)伸縮算法,執(zhí)行步驟3-2;否則繼續(xù)獲取當(dāng)前負(fù)載,并與負(fù)載閾值進(jìn)行比較;
3-2.根據(jù)近期負(fù)載表,計(jì)算當(dāng)前負(fù)載變化率,如果當(dāng)前負(fù)載變化率大于負(fù)載變化率閾值,說(shuō)明是突發(fā)負(fù)載采用響應(yīng)式伸縮,使用步驟1-2當(dāng)前數(shù)據(jù)中的的實(shí)時(shí)負(fù)載計(jì)算伸縮容器的數(shù)量;如果當(dāng)前負(fù)載變化率小于負(fù)載變化率閾值,說(shuō)明不是突發(fā)負(fù)載,采用預(yù)測(cè)式伸縮,使用步驟2-2的預(yù)測(cè)負(fù)載計(jì)算伸縮容器的數(shù)量;
執(zhí)行伸縮活動(dòng),
4-1、總伸縮執(zhí)行器根據(jù)步驟3-2中計(jì)算的伸縮容器的數(shù)量,向子伸縮執(zhí)行器發(fā)送相應(yīng)的伸縮請(qǐng)求,然后進(jìn)入冷卻狀態(tài),在此期間拒絕到達(dá)的伸縮活動(dòng),直到冷卻時(shí)間結(jié)束;
4-2、子伸縮執(zhí)行器收到伸縮請(qǐng)求后,執(zhí)行容器的創(chuàng)建、運(yùn)行、銷(xiāo)毀任務(wù),負(fù)責(zé)容器的整個(gè)生命周期,并進(jìn)行健康檢查,保證運(yùn)行的伸縮容器數(shù)量與步驟3-2的結(jié)果一致。
步驟2-2中所述對(duì)未來(lái)的工作負(fù)載值進(jìn)行預(yù)測(cè)的方法是時(shí)序分析、機(jī)器學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、模式匹配的任一種。
本發(fā)明有如下優(yōu)點(diǎn):
1.反應(yīng)敏捷
采用docker容器為基本單位進(jìn)行智能彈性伸縮,docker容器具有的秒級(jí)啟停、資源占用率少等特點(diǎn)。并通過(guò)實(shí)時(shí)響應(yīng)式彈性伸縮算法,對(duì)系統(tǒng)性能指標(biāo)進(jìn)行實(shí)時(shí)監(jiān)測(cè),在應(yīng)對(duì)突發(fā)式負(fù)載的場(chǎng)景下,能夠達(dá)到實(shí)時(shí)、細(xì)粒度、敏捷的調(diào)整docker容器的數(shù)量。
2.更加智能
綜合了預(yù)測(cè)式伸縮和響應(yīng)式伸縮,讓伸縮變得更加"智能"。獨(dú)立使用這兩種伸縮方式各自都有不足,而綜合使用可以讓他們?nèi)秉c(diǎn)互補(bǔ),通過(guò)預(yù)測(cè)方法來(lái)提前做好伸縮調(diào)整,并根據(jù)實(shí)時(shí)監(jiān)測(cè)的負(fù)載情況來(lái)修正伸縮,避免多余額開(kāi)銷(xiāo),同時(shí)采用彈性伸縮公差和冷卻時(shí)間,避免抖動(dòng)現(xiàn)象的產(chǎn)生,使伸縮更"理性"。
3.簡(jiǎn)單靈活
完全使用docker容器,來(lái)解決現(xiàn)有基于虛擬機(jī)的集群伸縮調(diào)整響應(yīng)時(shí)間長(zhǎng)的問(wèn)題,docker容器秒級(jí)啟動(dòng)停止,可通過(guò)簡(jiǎn)單的dockerfile來(lái)靈活地配置、創(chuàng)建容器,資源占用率低,使伸縮方法更加的靈活高效。
附圖說(shuō)明
圖1為基于docker容器集群的彈性伸縮控制系統(tǒng)拓?fù)鋱D;
圖2為基于docker容器集群的智能彈性伸縮方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
彈性伸縮控制系統(tǒng)包括docker容器集群和彈性伸縮控制器兩部分,其中docker容器集群由多個(gè)主機(jī)組成,每個(gè)主機(jī)包括若干個(gè)容器、一個(gè)子監(jiān)控器、一個(gè)子伸縮執(zhí)行器;彈性伸縮控制器包括一個(gè)總監(jiān)控器、一個(gè)歷史負(fù)載表、一個(gè)近期負(fù)載表、總伸縮執(zhí)行器、預(yù)測(cè)建模器和伸縮策略警報(bào)器,各設(shè)備或組件連接關(guān)系如圖1所示。
該基于docker容器集群的智能彈性伸縮方法,包含在如圖2所示的具體步驟中:
監(jiān)控采樣數(shù)據(jù):
步驟1)由子監(jiān)控模塊對(duì)每臺(tái)主機(jī)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,并將定時(shí)采集到的數(shù)據(jù)發(fā)送至總監(jiān)控模塊:每臺(tái)主機(jī)上部署子監(jiān)控模塊,負(fù)責(zé)采樣、統(tǒng)計(jì)和處理宿主機(jī)和容器的實(shí)時(shí)和歷史的cpu使用率、內(nèi)存使用率、磁盤(pán)io、網(wǎng)絡(luò)吞吐量、請(qǐng)求響應(yīng)時(shí)間、請(qǐng)求率等;
步驟2)總監(jiān)控模塊匯聚子監(jiān)控模塊發(fā)來(lái)的數(shù)據(jù),并將數(shù)據(jù)發(fā)送到歷史負(fù)載表、近期負(fù)載表和規(guī)則伸縮報(bào)警器;
數(shù)據(jù)預(yù)測(cè)分析:
步驟3)存儲(chǔ)歷史負(fù)載數(shù)據(jù),對(duì)負(fù)載數(shù)據(jù)進(jìn)行采樣、加權(quán)、分類(lèi)等預(yù)處理;
步驟4)將步驟3)的歷史負(fù)載數(shù)據(jù)代入預(yù)測(cè)模型,對(duì)未來(lái)的工作負(fù)載值進(jìn)行預(yù)測(cè):利用預(yù)測(cè)方法如時(shí)序分析、機(jī)器學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、模式匹配等,在周期性負(fù)載到來(lái)之前提前完成預(yù)測(cè)任務(wù);
執(zhí)行伸縮算法:
步驟5)比較當(dāng)前負(fù)載與預(yù)設(shè)的負(fù)載閾值,如果當(dāng)前負(fù)載大于負(fù)載閾值上限的1.1倍或小于負(fù)載閾值下限的0.9倍,觸發(fā)伸縮算法,執(zhí)行步驟6);否則繼續(xù)實(shí)時(shí)獲取當(dāng)前負(fù)載,并與負(fù)載閾值進(jìn)行比較;
步驟6)根據(jù)近期負(fù)載數(shù)據(jù)表,計(jì)算當(dāng)前負(fù)載變化率,如果當(dāng)前負(fù)載變化率大于負(fù)載變化率閾值,則根據(jù)步驟2)中當(dāng)前負(fù)載計(jì)算伸縮容器的數(shù)量;如果當(dāng)前負(fù)載變化率小于負(fù)載變化率閾值,則根據(jù)步驟4)中的預(yù)測(cè)負(fù)載值計(jì)算伸縮容器的數(shù)量;
執(zhí)行伸縮活動(dòng):
步驟7)總伸縮執(zhí)行器基于步驟6)的伸縮數(shù)量,執(zhí)行相應(yīng)的伸縮活動(dòng),并進(jìn)入冷卻狀態(tài),在此期間,拒絕到達(dá)伸縮活動(dòng),直到冷卻時(shí)間結(jié)束;
步驟8)子伸縮執(zhí)行器管理容器的創(chuàng)建、運(yùn)行、銷(xiāo)毀等整個(gè)生命周期,并進(jìn)行健康檢查,保證運(yùn)行容器數(shù)量和步驟6)的結(jié)果一致。
至此,實(shí)現(xiàn)基于docker容器集群的智能彈性伸縮方案。
以上步驟中所涉及的一些關(guān)鍵操作定義如下:
負(fù)載預(yù)測(cè)模型:
實(shí)際中工作負(fù)載隨時(shí)間變化多樣,本實(shí)施例將其視為一個(gè)時(shí)間序列。時(shí)間序列往往具有一定的規(guī)律性:例如對(duì)于某在線購(gòu)物網(wǎng)站,每日晚上的交易量都要大于白天的交易量、每周周末的交易量要大于周內(nèi)的交易量等。從長(zhǎng)期來(lái)看,交易量變化具有規(guī)律巧,從短期來(lái)看,交易量變化又具有隨機(jī)性。變化的規(guī)律通過(guò)一段時(shí)間的觀察和統(tǒng)計(jì)是可以被發(fā)現(xiàn)和被捕獲的。對(duì)一個(gè)時(shí)間序列求其hurst指數(shù),如果結(jié)果區(qū)間為0.5~1,表示該序列存在長(zhǎng)期記憶性,也稱(chēng)為自相似性。計(jì)算結(jié)果值越接近1,自相似性越強(qiáng),可預(yù)測(cè)性也越強(qiáng),可將長(zhǎng)期負(fù)載表示為周期性負(fù)載。
自回歸模型(ar,auto-regressive)是一種線性預(yù)測(cè)算法,利用待預(yù)測(cè)目標(biāo)在之前不同時(shí)刻的歷史數(shù)據(jù)取值序列,從中找出隱藏的某種規(guī)律,通過(guò)分析一個(gè)因變量數(shù)列和另一個(gè)或多個(gè)自變量數(shù)列之間的關(guān)系,建立回歸方程并進(jìn)行預(yù)測(cè)。假設(shè)在一個(gè)自回歸過(guò)程中,義是一個(gè)隨機(jī)過(guò)程里的連續(xù)樣本,那么它線性依賴(lài)于前面的歷史樣本,可用如下的式子來(lái)表示自回歸模型:
yt+a1yt-1+a2yt-2+…+apyt-p=ηt
其中ai(i=1,...,p)表示自回歸系數(shù),ηt表示時(shí)許白噪聲,其均值為0表示該序列屬于平穩(wěn)隨機(jī)過(guò)程。
本實(shí)施例采用時(shí)序分析中的自回歸模型來(lái)對(duì)歷史周期性負(fù)載數(shù)據(jù)進(jìn)行建模,以完成對(duì)未來(lái)時(shí)刻工作負(fù)載的預(yù)測(cè)。
負(fù)載變化率:
判斷突發(fā)式工作負(fù)載的一般特征是:在極短的時(shí)間內(nèi),工作負(fù)載量增長(zhǎng)為原來(lái)的幾倍,表現(xiàn)為負(fù)載曲線在該時(shí)的切線斜率陡增。由此可以基于切線斜率的變化對(duì)工作負(fù)載是否為突發(fā)式進(jìn)行判斷。當(dāng)切線斜率變化超過(guò)某一閾值上限時(shí),判斷工作負(fù)載情況為突發(fā)式工作負(fù)載,則采用響應(yīng)式彈性伸縮擴(kuò)容;若斜率未超過(guò)閾值,則采用預(yù)測(cè)式彈性伸縮擴(kuò)容。。負(fù)載變化率閾值上限λu和下限λl由管理員設(shè)定,假設(shè)當(dāng)前請(qǐng)求響應(yīng)時(shí)間為γo,工作負(fù)載的上限閾值為γu/下限閾值為γl,在理想情況下,負(fù)載變化率閾值滿(mǎn)足:
定義在線監(jiān)測(cè)的請(qǐng)求響應(yīng)時(shí)間to,t時(shí)刻監(jiān)測(cè)的工作負(fù)載γo(t),當(dāng)前負(fù)載變化率λ,則計(jì)算公式為:
彈性擴(kuò)容容器數(shù)量公式:
定義t時(shí)刻監(jiān)測(cè)的單個(gè)容器工作負(fù)載γ(t),工作負(fù)載的上限閾值為γu,目標(biāo)容器數(shù)量n的計(jì)算公式為:
彈性擴(kuò)展的公差和冷卻時(shí)間:
啟動(dòng)或者停止docker容器時(shí)可能向監(jiān)控指標(biāo)引入噪聲,如啟動(dòng)時(shí)可能暫時(shí)增加負(fù)載,所以,在每個(gè)啟動(dòng)或者停止動(dòng)作操作之后,應(yīng)該等待一些時(shí)間,稱(chēng)之為冷卻時(shí)間,例如在擴(kuò)容結(jié)束3分鐘時(shí)間之后才允許再次擴(kuò)容,縮容結(jié)束5分鐘之后才允許再次縮容,為了縮短冷卻時(shí)間,任何伸縮動(dòng)作必須滿(mǎn)足10%的公差,如下擴(kuò)容公式所示:
γ(t)>γu*1.1
其中γ(t)為t時(shí)刻監(jiān)測(cè)的容器工作負(fù)載,γu工作負(fù)載的上限閾值,采用公差和冷卻時(shí)間的方法好處有:
(1)以保守的方式伸縮。當(dāng)負(fù)載增加時(shí),迅速增加容器的數(shù)量以避免用戶(hù)的請(qǐng)求不會(huì)被拒絕是非常重要的,而減少容器的數(shù)量并不那么著急。
(2)避免抖動(dòng)。防止在負(fù)載還不穩(wěn)定時(shí),就執(zhí)行了伸縮活動(dòng)。
彈性伸縮算法:
當(dāng)集群開(kāi)始工作時(shí),伸縮算法也同時(shí)生效。定時(shí)采用集群工作負(fù)載,并進(jìn)行相應(yīng)的記錄,具體過(guò)程如下:
步驟1)執(zhí)行伸縮算法,每經(jīng)過(guò)一段固定時(shí)間間隔就會(huì)對(duì)當(dāng)前的請(qǐng)求響應(yīng)時(shí)間和工作負(fù)載進(jìn)行采樣,同時(shí)將監(jiān)測(cè)得到的負(fù)載率分別輸入到歷史負(fù)載表h和近期負(fù)載表p里,以備后用。
步驟2)根據(jù)近期負(fù)載表p里的數(shù)據(jù)計(jì)算當(dāng)前時(shí)刻的負(fù)載變化率λ,和利用歷史負(fù)載表h里的數(shù)據(jù),通過(guò)自回歸模型計(jì)算對(duì)未來(lái)時(shí)刻的工作負(fù)載γp(t)。
步驟3)觀測(cè)的工作負(fù)載,反映的是當(dāng)前時(shí)刻集群的負(fù)載情況。當(dāng)觀測(cè)負(fù)載γo(t)或預(yù)測(cè)負(fù)載γp(t)超過(guò)上限閾值γu時(shí),將觸發(fā)擴(kuò)容算法。當(dāng)觀測(cè)負(fù)載γo(t)或預(yù)測(cè)負(fù)載γp(t)低于下限閾值γl時(shí),將觸發(fā)縮容算法。
擴(kuò)容算法:
通過(guò)計(jì)算當(dāng)前的負(fù)載變化率,對(duì)工作負(fù)載是否為突發(fā)式進(jìn)行判斷,對(duì)當(dāng)前工作負(fù)載類(lèi)型是否為突發(fā)式,當(dāng)切線斜率變化超過(guò)某一閾值上限時(shí),判斷工作負(fù)載情況為突發(fā)式工作負(fù)載,則采用響應(yīng)式彈性伸縮擴(kuò)容;若斜率未超過(guò)閾值,則采用預(yù)測(cè)式彈性伸縮擴(kuò)容。具體過(guò)程如下:
步驟1)調(diào)用擴(kuò)容算法時(shí),當(dāng)前負(fù)載變化率λ大于工作負(fù)載上限閾值γu時(shí),容器數(shù)量n由
步驟2)由步驟1)的結(jié)果,在docker容器集群中啟動(dòng)n個(gè)容器。
步驟3)在每次伸縮擴(kuò)展執(zhí)行完成后,都需要經(jīng)過(guò)一段冷卻時(shí)間,以防集群頻繁伸縮造成的“抖動(dòng)”現(xiàn)象,在此冷卻期間,拒絕伸縮活動(dòng)。
本實(shí)施例針對(duì)突發(fā)性負(fù)載和周期性負(fù)載,能夠智能彈性伸縮docker容器集群。利用docker容器的快速啟停、資源占用率少等特點(diǎn),實(shí)現(xiàn)降低集群工作負(fù)載、減少用戶(hù)請(qǐng)求響應(yīng)時(shí)間,并能夠有效避免集群抖動(dòng)情況的產(chǎn)生。
本發(fā)明方案所公開(kāi)的技術(shù)手段不僅限于上述實(shí)施方式所公開(kāi)的技術(shù)手段,還包括由以上技術(shù)特征任意組合所組成的技術(shù)方案。