黃 秀 蔡全旺 王慶年
(中國船舶重工集團公司第七二二研究所 武漢 430205)
云計算以即付即用的方式為人們提供了彈性的計算資源,引發(fā)了信息通信技術產(chǎn)業(yè)的徹底變革。然而云平臺中的資源一般是靜態(tài)配置,在大多數(shù)的實際應用中無法最大限度地充分利用資源?;鸷臄?shù)據(jù)中心經(jīng)理德里克(Derek Moore)指出,Mozilla的數(shù)據(jù)中心服務器CPU利用率在大部分情況下處在6%~10%,這無疑是巨大的浪費。因此,物理服務器上某些資源使用超過限定閾值時,將一些虛擬機遷移到其他物理機上,以保證服務質量,降低負載;在資源利用率低于限定閾值時,將虛擬機集中遷移到一個物理機上,關閉閑置的物理機,實現(xiàn)節(jié)能。
Openstack作為一個開源的云計算工具,已經(jīng)被許多大型的軟件公司,諸如IBM,Rackspace所采用。在Openstack中,資源調(diào)度主要分為三步:主機過濾、權值計算、主機選擇,具體的虛擬機分配由nova-scheduler模塊負責,但這只是一種靜態(tài)的資源分配,虛擬機在初始調(diào)動后就不再遷移,實際資源利用率低下,因此我們需要一種動態(tài)的調(diào)度算法來補充現(xiàn)有算法的不足,提高資源利用率,降低能耗。
本文研究的動態(tài)調(diào)度算法重點在負載預測算法的研究上,主要是:采用預測算法預測未來下一時刻系統(tǒng)的負載,以便調(diào)度系統(tǒng)能夠提前做好資源調(diào)度準備。
常見的負載預測算法包括時間序列預測[1]、灰色預測、BP神經(jīng)網(wǎng)絡預測和其他預測算法,許多研究人員在上述各領域紛紛提出了自己的預測算法。李丹程等[2]利用回歸分析方法,預測云計算環(huán)境下服務器負載情況的變化,提出了資源動態(tài)調(diào)度算法,將計算任務遷移到更合適的服務器,達到提高集群計算能效目的。Beloglazov等[3]則在主機過載檢測中采用局部回歸算法對CPU的利用率進行預測,將預測值與門限值進行比較,從而做出是否需要對虛擬機進行調(diào)度的決策。灰色預測是一種對含有不確定因素的系統(tǒng)進行預測的方法[4],當預測序列具有指數(shù)增長特性時才能凸顯該模型的作用。Li等[5]則使用的是BP神經(jīng)網(wǎng)絡模型,將虛擬機的負載信息作為輸入來預測服務響應時間,然后預測的服務響應時間就可以被當做動態(tài)調(diào)度策略的基礎來進行虛擬機的調(diào)度。馬堯等[6]在他們的預測算法中采用分形插值方法對Openstack中資源負載情況進行預測,以對虛擬機運行調(diào)度提供參考,進而達到提高集群計算效能的目的。Kusic等[7]提出了一種有限預測控制作為資源調(diào)度的解決方案,作者使用一個Kalman濾波器來預測未來負載。Herbst等[8]在他們的文章中提出了一種基于決策樹的自適應方法,該方法可以根據(jù)一個給定的上下文選擇合適的預測方式。物理機的負載值是隨時間變化的,因此本文采用時間序列預測法作為負載預測的模型。
Openstack是現(xiàn)今最活躍的開源項目之一,它采用模塊化設計,主要由 Keystone,Glance,Hori?zon,Nova,Swift,Cinder,Neutron等7個模塊構成[9]。Keystone是認證管理組件,提供了其余所有組件的認證信息的管理,創(chuàng)建和修改;Glance負責鏡像管理,提供了對虛擬機部署時所需的鏡像的管理;Ho?rizon是儀表盤組件,提供了以web的形式對所有節(jié)點的所有服務的管理;Nova主要負責虛擬機的生命周期,提供虛擬機的創(chuàng)建,銷毀,遷移,快照等服務;Swift是對象存儲服務組件;Cinder是塊存儲組件;Neutron是網(wǎng)絡服務組件,負責集群網(wǎng)絡及租戶網(wǎng)絡的管理。Openstack組件主要通過Restful Api進行信息的交互,內(nèi)部組件則通過AMQP進行信息交換[10]。
預測模塊最主要的目標就是預測未來某時刻的工作負載,然后根據(jù)用戶定義的伸縮策略進行調(diào)整。在這其中涉及到兩個重要的問題,一個是數(shù)據(jù),另一個就是預測方法。Chen等[11]在他們的文章中就對幾種時間序列預測方法進行了比較,主要是自回歸移動平均模型(ARMA),自回歸模型(AR),指數(shù)平滑模型(ES),自適應指數(shù)平滑模型(TAES),移動平均模型(MA)的比較。表1是它們的比較結果。
表1 不同預測模型的比較
從表中可以看出,ARMA,AR及ES模型是表現(xiàn)最好的三個,ARMA模型效果是最佳的,但其算法相對其他兩個而言很復雜,計算量也比較大,在實際運行時可能會占用一部分的計算資源。故本文根據(jù)此文獻的研究結果選擇了一次指數(shù)模型作為此次的預測模型。一次指數(shù)平滑的預測計算公式為
一次平滑值,yt是t期的實際觀測值,t+1是t+1期的預測值,α是加權系數(shù),取值范圍為0<α<1。當數(shù)據(jù)樣本的個數(shù)大于15項時,一次平滑初值一般就取為樣本初值;若小于15項,則一般取樣本前三項的平均值。
從上述的一次指數(shù)平滑公式可以看出,權系數(shù)α是固定不變的,很顯然當系統(tǒng)數(shù)據(jù)波動較大時,α極有可能并不是此時的最優(yōu)系數(shù),從而預測的準確度也會受到影響,因此如何動態(tài)地選取最優(yōu)的權系數(shù)成為了關鍵。
文獻[12]中運用數(shù)學推導的方式導出了一種動態(tài)的指數(shù)平滑模型,它是將傳統(tǒng)的指數(shù)平滑模型的系數(shù)進行了歸一化處理。我們將一次指數(shù)平滑的公式進一步展開如下:
上式呈現(xiàn)的動態(tài)預測公式中,α(t)的最終取值結果也是依靠靜態(tài)的α的選取,一般情況下,α根據(jù)人們的經(jīng)驗來取值,這無疑也會影響到預測的準確度,因此我們需要將靜態(tài)的α選取變?yōu)閯討B(tài)的。
本文中,我們采用預測值與觀測值的誤差平方和SSE最小作為衡量α值是否為最優(yōu)的標準,也即
圖1 預測算法流程圖
通過采用兩種一維搜索算法,即Fibonacci法和黃金分割法以獲得最優(yōu)系數(shù),分別計算采用Fi?bonacci法時獲得的系數(shù)αk1和采用黃金分割法獲得的系數(shù)αk2,然后比較SSE(αk1)和SSE(αk2),取αk=arg min{SSE(αk1),SSE(αk2)},F(xiàn)ibonacci法和黃金分割法的偽代碼如Algorithm1和Algorithm2所示。
取得最優(yōu)系數(shù)后,就可以代入歸一化公式中中,求出歸一化后的權系數(shù),進行預測。
預測算法描述如圖1所示。
Algorithm1 Fibonacci
輸入:初始區(qū)間[a1,b1],最終長度L
輸出:極小值點x_opt
輸入:初始區(qū)間[a1,b1],精度tol,函數(shù)f
輸出:極小值點xopt
綜合來看,本文提出的算法是先由兩種搜索算法搜索出最佳的權系數(shù),這一點相對于傳統(tǒng)的指數(shù)平滑法來說有進步之處。傳統(tǒng)的指數(shù)平滑法是根據(jù)經(jīng)驗判斷法或試算法來選定權系數(shù),這兩種方法很容易受到主觀影響,從而干擾到實際應用中的預測精度;另一方面,其他的預測模型,如回歸模型,移動平均模型等在實際使用中是相對固定的,模型不能夠依據(jù)負載實際的變化情況而進行動態(tài)的調(diào)整,這就容易出現(xiàn)預測結果不夠準確。由于本文對權系數(shù)進行歸一化,權系數(shù)成為了時間的函數(shù),隨著時間的推移,權系數(shù)也在不斷變化,預測模型也可以說是在動態(tài)變化,很好地迎合了負載在動態(tài)變化這一特點。
在Openstack中實現(xiàn)負載預測分兩步進行:數(shù)據(jù)采集,負載預測,數(shù)據(jù)采集模塊為預測模塊提供物理機中各項資源的歷史數(shù)據(jù)。由于本文采用的實驗環(huán)境是all-in-one的,數(shù)據(jù)采集模塊和預測模塊位于同一個物理節(jié)點。本文主要采用Openstack中的Ceilometer項目來進行資源的監(jiān)控,進而為預測模塊提供數(shù)據(jù),預測模塊則采用上述的動態(tài)一次指數(shù)平滑模型來實現(xiàn)。
Ceilometer采用兩方式來采集信息,一種是通過Notification agent監(jiān)聽系統(tǒng)中的Message Queues主動消費Openstack內(nèi)各個服務自動發(fā)出的Notifi?cation消息,另一種是通過Polling agent周期性調(diào)用各個服務的API去主動輪詢獲取數(shù)據(jù)。圖2是Ceilometer采集信息的架構圖[13]。Compute Volume Network Image Object Storage
圖2 Ceilometer信息采集架構圖
由于本文需要的是物理機的CPU利用率等數(shù)據(jù)信息,這些信息不會通過Notification來發(fā)出,故我們采用第二種方式來獲取信息。Ceilome?ter-agent-central組件是Polling agent中的一種,它可以通過snmp協(xié)議直接收集物理機的CPU、MEM、IO等信息,與此同時還需要對Ceilometer增加一些額外的配置,由于增加的配置原理基本相同,這里我們以采集物理機CPU信息為例。
首先需要在物理機上安裝snmp和snmp包,然后修改配置文件snmpd.conf:
agentAddress udp:192.168.0.108:161
view systemonly include.1
重啟snmp服務后,在Ceilometer的pipeline.yaml文件中加入以下信息(也可以根據(jù)自己的需求配置):
重啟Ceilometer服務后,就可以通過相關命令查詢到新增的監(jiān)控項和監(jiān)控數(shù)據(jù)。
在設計負載預測模塊時,主要是通過調(diào)用Ceil?ometer的API讀取存數(shù)據(jù)庫中的數(shù)據(jù),然后將數(shù)據(jù)進行預處理后傳入到預測模塊。
詳細流程如下:
1)調(diào)用Ceilometer提供的REST API獲取物理機的監(jiān)控數(shù)據(jù)。
2)Pre-process對數(shù)據(jù)進行預處理,剔除偏差過大的數(shù)據(jù)。
3)根據(jù)負載的歷史數(shù)據(jù)調(diào)用實現(xiàn)的動態(tài)一次指數(shù)預測算法預測負載的變化規(guī)律。
圖3是本文設計的一個系統(tǒng)的預測架構圖。
圖3 系統(tǒng)預測架構圖
在本次實現(xiàn)中采用了Webbench作為本文的并發(fā)測試工具,Webbench最多可以模擬3萬個并發(fā)連接去測試網(wǎng)站的負載能力。測試的硬件環(huán)境為all-in-one,使用的服務器的硬件配置為Intel Xeon 6核CPU,內(nèi)存容量為8G,硬盤容量為2TB。在這臺物理服務器上部署了Openstack Queens版本的云平臺環(huán)境,在Openstack中部署的虛擬機集群配置如表2。
表2 虛擬機配置
各虛擬機服務器之間通過HAProxy負載均衡器來分發(fā)Webbench產(chǎn)生的負載,HAProxy配置中使用了負載均衡算法時roundrobin。由于條件有限,故Haproxy在flavor類型為ds2G的一臺虛擬機中進行配置。實驗架構如圖4所示。
本文主要考慮了在負載突然增大的情況下,對宿主機CPU利用率的預測情況,實驗通過Ceilome?ter監(jiān)控模塊獲取使用Webbench模擬的在負載增大并維持一段時間宿主機的資源利用率情況,預測資源的利用率。
圖4 實驗環(huán)境中的虛擬機配置
在實驗過程中,利用Webbench增大模擬用戶數(shù),模擬真實系統(tǒng)環(huán)境下負載增大時資源需求的變化,監(jiān)控系統(tǒng)每3分鐘采集一次信息,通過監(jiān)控系統(tǒng)獲取90分鐘內(nèi)的宿主機資源數(shù)據(jù),主要是CPU的利用率信息,實驗中利用這90分鐘內(nèi)的數(shù)據(jù)計算出預測值。在實際的測試中,F(xiàn)ibonacci取得的最優(yōu)系數(shù)是0.875,而黃金分割法計算得出的最優(yōu)系數(shù)是 0.95,經(jīng)過計算,SSE(0.875)=0.09663,SSE(0.95)=0.03448。當權系數(shù)α取值為0.95時,CPU利用率的預測結果如圖5所示。
圖5 CPU利用率實際值與預測值
我們可以看到,動態(tài)自適應的一次指數(shù)平滑模型很好地擬合了數(shù)據(jù)未來走勢,預測精度也比較高,因此在實際的資源調(diào)度的方案設計中具有很高的實用性,計算也不太復雜。但此次實驗也存在著不足,從上面的實驗過程我們可以看到,權系數(shù)α是分別采用Fibonacci法和黃金分割法計算誤差平方和后比較的出來的,當歷史數(shù)據(jù)增長到一定長度時,計算會變得復雜,這樣一來反而使預測的目的處于次要地位,因此如何適當?shù)剡x取數(shù)據(jù),設計恰當?shù)臅r間窗口,使得計算量合適,預測精度又比較準確是下一步的研究工作。
本文在一次指數(shù)預測模型的基礎上進行了改進,提出了利用Fibonacci法和黃金分割法來確定最優(yōu)權系數(shù),從而避免了人工設置權系數(shù)帶來的計算偏差,并在Openstack平臺中進行了實驗驗證和結果分析,但正如分析部分所闡述的,在選取合適的數(shù)據(jù),設計恰當?shù)臅r間窗口等方面還有許多要改進的地方。