劉錢超,吳 利,鄭禮輝
(江南計算技術研究所,江蘇 無錫 214083)
0 引 言
隨著大數據、云計算等軟件技術的飛速發(fā)展,基于虛擬機集群的分布式軟件運行環(huán)境構建方式資源開銷大、耗時長、可伸縮性差等缺點逐漸顯露,降低了軟件運行效率,增加了運維成本,而具有高可伸縮性和高資源使用率等優(yōu)勢的容器云環(huán)境為上述問題提供了優(yōu)化方案[1-2]。
容器云是以容器為資源分割和調度的基本單位,封裝整個軟件運行時環(huán)境,為開發(fā)者和系統(tǒng)管理者提供用于構建、發(fā)布和運行分布式應用的平臺[3]。基于容器云構建軟件運行環(huán)境,與基于虛擬機集群方式相比,具有簡化軟件部署方式、優(yōu)化管理運維模式和降低運維成本等優(yōu)勢。然而,容器云作為一種全新的云環(huán)境解決方案,在集群動態(tài)伸縮策略方面仍存在不足。集群的動態(tài)伸縮[4-6]是指集群能夠根據工作負載的變化動態(tài)地調整自身規(guī)模,從而調整其對外服務的能力。目前,容器云采用的是基于閾值的響應式伸縮策略,該策略只會對系統(tǒng)資源的實時情況進行響應,因而系統(tǒng)的伸縮調整往往會晚于工作負載的變化,導致服務質量不佳,用戶體驗較差。
目前,已有很多關于云環(huán)境下集群動態(tài)伸縮策略的改進研究。文獻[7]提出一種基于工作流模型的虛擬機動態(tài)分配和回收策略,能夠較大程度地提高系統(tǒng)資源利用率,但該策略不能對集群未來工作負載進行預測。文獻[8]針對基于虛擬機的資源管理難以實現細粒度的資源動態(tài)調整與混合云中跨平臺服務快速遷移的問題,提出一種基于容器技術的云計算資源自適應管理方法,能夠提高集群自適應響應速度和集群整體性能,但該方法也不能對集群未來工作負載進行預測。文獻[9]提出一種基于集群負載預測的虛擬機資源管理框架,能夠實現對未來工作負載預測并及時做出伸縮響應,保證服務質量,但該框架底層是基于虛擬機資源實現,由于虛擬機啟停耗時長,集群伸縮響應速度仍然較慢。
針對文獻[7-8]不能對未來工作負載進行預測和文獻[9]中基于虛擬機資源響應速度慢的不足,提出一種基于二次移動平均法的預測式容器云伸縮方法。該方法可以對未來工作負載進行預測并依托容器輕量特點快速做出伸縮響應,從而降低服務響應時間的波動幅度,提高服務的質量和穩(wěn)定性。
1 伸縮策略選擇與預測模型建立
1.1 集群動態(tài)伸縮技術
集群動態(tài)伸縮技術包括響應式伸縮[10]和預測式伸縮[11]兩種。
(1)響應式伸縮。
基于閾值的響應式伸縮策略因算法實現簡單,對集群突發(fā)式負載具有較好效果,目前被廣泛應用于云平臺伸縮決策中。響應式伸縮策略需要對響應規(guī)則和閾值進行設定。算法運行時,會對系統(tǒng)內資源(CPU、網絡、存儲、內存等)進行監(jiān)控,一旦監(jiān)測到某些指標超過既定閾值,集群會發(fā)出相應的擴展或收縮命令。具體來說,如圖1(a)所示,t1時刻通過對系統(tǒng)資源進行持續(xù)監(jiān)控,當t2時刻監(jiān)測到系統(tǒng)資源有較大變化且超過閾值(包括上下限閾值)時,開始進行集群伸縮,t5時刻完成伸縮。基于閾值的響應式伸縮策略存在的不足是無法對未來負載進行預測,只能對系統(tǒng)資源的實時情況進行響應,因而系統(tǒng)的伸縮調整往往會晚于工作負載的變化,導致服務質量不佳,用戶體驗變差。
(2)預測式伸縮。
預測式伸縮策略是對過去一段時間內系統(tǒng)資源使用情況進行分析,然后利用數學方法進行建模并完成對未來時刻的預測。它能夠較好克服響應式伸縮策略存在時間滯后性的缺點。具體來說,如圖1(b)所示,當t1時刻根據歷史數據特點預測到t6時刻系統(tǒng)資源使用發(fā)生較大改變且超過所設置的閾值時,系統(tǒng)會在t2時刻發(fā)出伸縮命令,因而系統(tǒng)能在t6時刻負載發(fā)生大幅變化之前有充足時間完成伸縮操作,從而能夠及時響應系統(tǒng)資源變化。

圖1 兩種伸縮方式
根據上述對兩種伸縮策略的分析,文中結合使用預測式伸縮策略與響應式伸縮策略,在對集群突發(fā)式負載具有良好響應效果的同時,也可以實現對未來時刻負載值的預測,克服響應式伸縮策略存在時間滯后性的不足,從而提高集群資源響應速度,更好地保障應用服務的質量和穩(wěn)定性。
1.2 預測模型建立
預測式伸縮策略常采用的分析方法主要有時間序列分析和機器學習[12],但機器學習需要較長模型訓練時間,適用性不強。
二次移動平均法(又名二重移動平均法)是一種時間序列分析方法,它是在預測目標時間序列上的一次移動平均值的基礎上再進行一次移動平均,并將結果代入到相關公式中得到預測值,目的是解決一次移動平均法存在滯后偏差,使得預測值總是落后于實際觀測值的問題。它適用于數據隨某個變量呈現自相關特性的場景,考慮到容器云中應用的資源使用情況可能隨時間呈現一定規(guī)律,因此文中選取二次移動平均法對未來時刻負載值進行預測。其數學計算公式如下:
假設xt,xt-1,…,xt-n+1為系統(tǒng)在時刻t的歷史數據序列,因此t時刻數據序列的一次移動平均值為:
(1)

t時刻的二次移動平均值為:
(2)

(3)
(4)
(5)
因此基于二次移動平均法,對t時刻歷史數據序列進行分析,可以計算出t+T時刻的預測值:
(6)
2 容器云動態(tài)伸縮方案
2.1 容器云伸縮決策過程
圖2為文中提出的容器云伸縮算法的決策過程。在算法運行過程中,系統(tǒng)內會維護一張容器服務最近L次響應時間記錄表H,通過對系統(tǒng)內容器服務(Service_ID)的響應時間tres進行持續(xù)監(jiān)控并用獲取到的數據不斷更新記錄表H。決策模塊會對表H中最近L次響應時間進行處理、建模、預測,得到未來時刻的預測值tpre,根據實時響應時間數據以及預測值,利用基于閾值的響應式伸縮策略進行系統(tǒng)伸縮決策,并將伸縮命令傳遞給伸縮執(zhí)行模塊執(zhí)行。執(zhí)行完畢后,判斷伸縮算法是否繼續(xù)運行,根據判斷結果來決定繼續(xù)循環(huán)或終止該算法。

圖2 容器云伸縮決策過程
2.2 伸縮算法模塊設計
如圖3所示,伸縮算法包含Monitor、Processor、Commander和Scheduler四個模塊。

圖3 伸縮算法模塊
(1)Monitor模塊。
Monitor模塊負責對應用服務響應時間tres持續(xù)監(jiān)控,并用獲取到的響應時間序列不斷更新表H,使表H始終保持存儲最近L次應用服務響應時間。設定更新表H的策略為每次獲取服務響應時間tres后,將其加入到鏈表尾部,同時將鏈表首元素刪除。在Monitor獲取到服務響應時間后,同時也將采集到的數據傳遞給Commander模塊。
(2)Processor模塊。
Processor模塊主要對表H中最近L次服務響應時間數據進行分析、建模和對未來時刻值的預測。在具體算法實現時,假設表H中存儲的最近L次服務響應時間序列為:xt-L+1,xt-L+2,…,xt-1,xt,設置好二次移動平均法參數n和預測間隔T后,基于二次移動平均法,根據表H中L條數據使用式6預測t+T時刻的服務響應時間值xt+T,并將預測值傳遞給Commander模塊。
(3)Commander模塊。
Commander模塊會對Monitor模塊采集到的實時服務響應時間tres和Processor模塊利用二次移動平均法計算出的響應時間預測值tpre依據基于閾值的響應式伸縮策略進行判斷,如果tres>Tu‖tpre>Tu(Tu為響應時間閾值上限)關系成立,說明系統(tǒng)內服務響應時間過長,質量較差,因此Commander模塊會向Sch-eduler模塊發(fā)出擴展命令,由Scheduler模塊完成容器服務擴展(算法1中4~6行))。如果tres
算法1:伸縮決策算法。 Input:tres,H,Tu,Td,Service_ID Output:Scale_Dec 1 Begin 2 While(algorithm is running) 3 Monitor and Collecttres,Maintain the tableH,calculate the valuetpre 4 iftres>Tu||tpre>Tu 5 send(Extension,E,Service_ID) command to Scheduler 6 end if 7 iftres | 8 send(Contraction,E,Service_ID) command to Scheduler 9 end if 10 end While 11 End (4)Scheduler模塊。 Scheduler模塊保存了一份對所有主機的評分表。集群中所有備選主機的CPU使用率、內存占用率以及網絡帶寬占用率每隔一段時間就會被Scheduler模塊收集,并依據式7進行評分和記錄到評分表中,通過評分高低來決定在哪臺主機上進行容器服務的伸縮。 Scorei=(3-CPU_use-Mem_use-Net_use),Scorei∈(0,3) (7) 其中,CPU_use為CPU使用率;Mem_use為內存占用率;Net_use為網絡帶寬占用率。 同時,擴展時需要計算擴展容器服務個數N。假設需要擴展的資源為E,單個容器持有資源為E0,因此可得N=E/E0。當需要進行收縮資源時,為防止因系統(tǒng)突然減少大量資源造成系統(tǒng)運行異常,設定收縮資源時,每次釋放1個容器服務。 Scheduler模塊在運行過程中,需要接收由Commander模塊發(fā)出的命令,如果收到的是擴展命令,選擇當前打分表中分數最高的主機,根據服務ID及新建容器命令,在指定主機上部署N個指定ID的容器,對外提供服務并將其記錄到Service記錄表S中,擴展工作結束。此時為了避免因頻繁伸縮導致系統(tǒng)劇烈“抖動”,伸縮算法進入一小段時間的休眠期(算法2中3~8行);如果收到的是收縮命令,選擇當前打分表中分數最低且其上運行著相關服務的主機。分數低意味著其上負載較重,因此在釋放資源時,為了維持負載均衡,首先移除負載較重主機上的服務,減輕其上負載壓力。主機選定后,根據容器服務的ID,使用相關命令移除1個容器服務,回收資源并更新Service記錄表S的內容,收縮工作結束。同樣,為了避免因頻繁伸縮導致系統(tǒng)劇烈“抖動”,伸縮算法進入一小段時間的休眠期(算法2中9~14行)。 算法2:伸縮執(zhí)行算法。 Input:(COMMAND,E,Service_ID) Output:UpdatedS 1Begin 2 While(algorithm is running) 3 if “COMMAND” equals “Extension” 4 calculateN=E/E0; 5 Select the highest Score of the physical machine and deployN 6 Service_ID container service,updateS; 7 Sleep(a period of time); 8 end if 9 if “COMMAND” equals “Contraction” 10N=1; 11 Select the lowestScoreof the physical machine and removeN 12 Service_ID container service,updateS; 13 Sleep(a period of time); 14 end if 15 end While 16 End 3 實驗驗證及結果分析3.1 實驗環(huán)境實驗搭建了兩個四節(jié)點的Docker swarm[13]集群,分別為集群1和集群2。集群1為無任何修改的Docker swarm集群,即原生集群,采用的是響應式伸縮策略。集群2為依據文中提出的伸縮策略改進后的Docker swarm集群。實驗需要使用的工具包括并發(fā)測試執(zhí)行工具Jmeter以及反向代理器Nginx。實驗硬件包含6臺PC機,各節(jié)點配置及安裝環(huán)境如表1所示。 
表1 集群信息 
續(xù)表1 圖4為實驗過程中主機之間的訪問順序。測試機通過其上安裝的Jmeter測試軟件以并發(fā)方式訪問swarm集群中容器Web認證服務(實驗條件下只生成一類服務),并記錄服務響應時間的變化情況。同時為了更好地驗證提出的伸縮方法,在訪問鏈路中加入了Nginx服務器來進行消息轉發(fā)。 
圖4 實驗過程中主機之間的訪問順序 文中提出的伸縮策略在具體算法實現時,L值設置為10,容器擴展和收縮個數N設置為1,響應時間閾值上限設置為0.9 s,閾值下限設置為0.2 s。二次移動平均法中n設置為2,預測時刻間隔T設置為1,也即根據t時刻的3個響應時間值,使用二次移動平均法可以預測t+1時刻的響應時間值。 3.2 實驗測試數據表2為實驗負載數據。實驗負載數據分為兩類:周期性負載數據和突發(fā)式負載數據。 
表2 實驗負載數據 
續(xù)表2 3.3 實驗結果及分析圖5為施加周期性負載的實驗結果。 
圖5 周期性負載實驗結果 當請求數為50、120時,文中提出的算法和純響應式伸縮算法效果一致,兩條曲線在圖中完全重合。原因是此時服務的實時響應時間和響應時間的預測值均未超過響應時間的閾值上限,沒有觸發(fā)容器云集群的伸縮機制。當請求數增長至230時,文中算法下個時刻的服務響應時間預測值已經超出了閾值上限,因此會選擇一臺分數最高的主機新建一個對應容器并提供服務。當請求數繼續(xù)增長至320時,由于文中算法已提前擴展了容器服務,服務的響應時間減至約為純響應式伸縮算法的一半,而此時純響應式伸縮算法才判定響應時間超過閾值上限并開始擴展。直到請求數為410時,純響應式算法擴展效果開始顯現,與文中算法效果一致。收縮過程與上述擴展過程類似。 從圖5可以看出,對純響應式伸縮策略,容器服務響應時間波峰為0.9 s,波谷為0.2 s,波動幅度為0.7;而文中提出的優(yōu)化算法服務響應時間波峰為0.7 s,波谷為0.3 s,波動幅度為0.4。與純響應式伸縮策略相比,文中算法的服務響應時間的波動幅度降低了約42.9%,有效減弱了由負載變化引起的服務響應時間波動。 圖6為施加突發(fā)式負載的實驗結果。 
圖6 突發(fā)式負載實驗結果 從圖中可以看出,文中算法與純響應式伸縮算法結果始終保持一致,兩條曲線完全重合。原因為對改進伸縮策略后的Docker swarm集群施加突發(fā)式負載時,二次移動平均法無法對未來時刻值進行準確預測,導致預測效果喪失,集群伸縮決策只由服務的實時響應時間和響應時間閾值之間大小關系決定。因此,對于突發(fā)式負載,文中算法與純響應式伸縮算法表現一致。 3.4 實驗結論文中提出的基于二次移動平均法的預測式容器云伸縮策略,在保留基于閾值的響應式伸縮策略對突發(fā)式負載具有良好響應效果的同時,在周期性負載條件下還能對未來負載值進行準確預測,提高了容器云對應用資源請求的響應能力,降低了服務響應時間波動幅度,保證了服務響應時間的穩(wěn)定性。 4 結束語針對容器云目前基于閾值的響應式伸縮策略存在時間滯后性、難以及時響應服務資源請求的問題,提出一種基于二次移動平均法的預測式容器云伸縮方法。該方法可以對未來工作負載進行預測并依托容器輕量特點快速做出伸縮響應。通過設計兩種不同的工作負載場景對改進后容器集群伸縮方法進行了測試,驗證了該方法的可行性和有效性。但該方法也存在不足,即對周期性工作負載具有較好的預測效果,而對其他類型工作負載的預測效果并不理想。后續(xù)研究可以考慮結合機器學習方法來建立預測模型,提高預測模型在各種工作負載場景下的預測準確性。
欧美色图中文字幕|
丰满人妻一区二区三区免费视频|
91精品久久久中文字幕|
高h喷水荡肉爽文np肉色学校|
伊人久久五月丁香综合中文亚洲
|
国产精品 视频一区 二区三区|
人人爽亚洲aⅴ人人爽av人人片
|
撕开奶罩揉吮奶头视频|
免费看国产成年无码av|
亚洲一区二区三区美女av|
久久成人永久婷婷99精品|
插入日本少妇一区二区三区|
无人区一码二码三码四码区|
91spa国产无码|
日本一区二区啪啪视频|
日本加勒比一道本东京热|
欧美xxxxx高潮喷水麻豆|
精品麻豆国产色欲色欲色欲www|
性做久久久久久久|
久久久精品国产老熟女|
99无码精品二区在线视频|
精品国产v无码大片在线观看|
四虎影视久久久免费|
亚洲国产日韩综合天堂|
欧美成人国产精品高潮|
国产成人av一区二区三区在线
|
成人精品综合免费视频|
久久九九有精品国产尤物|
亚洲国产黄色在线观看|
亚洲午夜久久久精品影院|
国产三级在线观看播放视频|
中文字幕有码在线视频|
国产精品性色av麻豆|
性裸交a片一区二区三区|
精品国产制服丝袜高跟|
国产在线一区二区视频免费观看|
国产白浆一区二区三区佳柔|
精品乱人伦一区二区三区|
大地资源中文第三页|
日本少妇比比中文字幕|
加勒比精品视频在线播放|
|