張曉兵,朱仲馬
(中國電子科技集團公司第二十八研究所,南京 210001)
云計算作為一種新型的計算模式,被廣泛應用于多個領域,可通過互聯網將異構的資源虛擬化為資源池,提供給用戶計算存儲服務,還可通過云端服務器為用戶提供計算、存儲、軟件應用服務,按照服務類型分為SaaS(軟件即服務)、PaaS(平臺即服務)、IaaS(基礎設施即服務)[1]。為提高云計算平臺資源利用率、保證云計算的服務能力,采用合適的資源調度算法十分關鍵[2]。
現有算法有以降低云計算數據中心能耗為目標的節(jié)能資源調度方法[3],主要應用于大型數據中心以減少資源能耗;有以提高系統(tǒng)資源利用率為目標的資源管理方法,特點是確保所有物理資源都能得到充分的應用;基于負載預測的資源調度算法[4-5],主要根據歷史負載信息,采用人工智能算法預測數據中心負載,進行基本預測?,F有資源調度算法主要依賴傳統(tǒng)資源調度算法[6],在云計算的特殊環(huán)境里,資源調度策略需要有針對性,不存在可滿足各個場景實際資源調度需求的通用算法。針對以上問題,提出兩種資源調度策略:資源分配負載均衡,通過監(jiān)控、業(yè)務場景分類以及負載預判等手段,實現資源分配階段的均衡策略;另外隨著主機的不斷運行,主機負載也會發(fā)生很大變化。因此需要結合資源運行時的動態(tài)調度策略實現局部負載均衡,主要包含兩方面的實時負載均衡,以防止瞬時的負載變化影響系統(tǒng)整體負載,還可采用基于負載預測的算法,在主機業(yè)務空閑時提前完成負載遷移。
云計算系統(tǒng)主要包含控制器、計算節(jié)點,其中控制器負責資源調度和分配,計算節(jié)點為虛擬機提供計算存儲資源[7]。資源調度的主要目的是確保整個系統(tǒng)資源能夠合理均分,確保資源最大化使用。造成資源分配不合理的主要原因包括:創(chuàng)建時不合理,只考慮資源分配情況,未考慮資源冷熱情況以及負載情況;使用過程中發(fā)生資源回收和申請,可能導致整體負載出現不均衡;個別主機申請之后長期使用負載很低,導致資源浪費。
調度算法分為離線調度算法(靜態(tài)調度算法)和在線調度算法(動態(tài)調度算法)[8]。離線調度算法在調度之前已完成調度方法規(guī)劃,而在線調度算法是在系統(tǒng)運行過程中動態(tài)調整資源負載情況。在云計算環(huán)境中,無法預測資源的分配和回收,整個數據中心的負載情況隨時間變化可能出現很大波動,因此無法采用離線調度算法。
常見的動態(tài)調度算法主要有4種:①最小負載優(yōu)先調度算法,選擇瞬時負載最小的物理主機,只考慮瞬時最優(yōu)解,但是不會考慮系統(tǒng)整體的負載情況;②輪轉調度算法,所有主機按照順序依次遍歷分配系統(tǒng)資源;③面向服務優(yōu)先級的QoS調度策略[9],給虛擬機賦予動態(tài)優(yōu)先級,進行資源調度,根據虛擬機工作負載和QoS需求進行動態(tài)調整;④基于負載均衡的裝箱優(yōu)化策略,將物理節(jié)點抽象成為箱子,虛擬機作為物品,采用遺傳算法解決如何分配虛擬機,使物理主機數量最小以及虛擬機遷移次數最少。本文通過使用動態(tài)遷移技術,從兩個方面實現云計算資源動態(tài)調度:分配虛擬機資源時采用主機負載及冷熱預測模型進行主機選擇;系統(tǒng)運行過程中采用基于實時負載、結合分時段預測負載相結合的模式。
虛擬機動態(tài)調度的基本要求是能夠在用戶基本無感知的情況下,在系統(tǒng)內部進行資源調度和重新編排,主要依賴于兩種現有成熟的技術,虛擬機遷移技術和資源監(jiān)控技術。虛擬機遷移技術能夠保證虛擬資源服務在線進行主機之間的相互遷移,資源監(jiān)控技術能夠通過代理模式監(jiān)控平臺所有創(chuàng)建的虛擬主機和物理主機運行狀態(tài)以及負載情況。一方面可以了解系統(tǒng)整體運行狀態(tài),另外可以通過用戶無感知的手段進行資源重新規(guī)劃,保證調度策略正常運行。
虛擬機遷移是運用云計算資源動態(tài)調度策略[10]的技術,為資源動態(tài)調整提供可能。虛擬機遷移可實現虛擬機在不同宿主機間遷移,在遷移過程中源虛擬機通過內存、CPU、網絡、存儲遷移技術實現不中斷服務。其中存儲遷移涉及到大文件的傳輸,如果采用NAS、SAN等存儲設備共享數據,則無需進行磁盤數據的傳輸等。根據存儲是否遷移又分為兩種:基于共享存儲模式遷移和非共享存儲模式遷移。共享存儲遷移包含CPU狀態(tài)復制、網絡遷移、內存拷貝、不遷移存儲;非共享存儲遷移除了CPU、內存外,還需要遷移網絡和磁盤塊,數據較大的磁盤在遷移過程中會占用大量網絡帶寬,因此對磁盤遷移時需謹慎,防止影響系統(tǒng)服務質量。雖然虛擬機遷移技術已經十分成熟,但遷移過程中虛擬機提供的服務會出現短暫中斷,另外也會有內存開銷(遷移過程中,要在目標主機上分配內存空間拷貝源主機內存)、帶寬開銷(非共享存儲遷移中,大量數據傳輸消耗網絡帶寬)。
圖1 虛擬機遷移
資源監(jiān)控技術是一種利用計算機控制等技術實現對現場環(huán)境數據存儲、采集和監(jiān)控的系統(tǒng),采用資源監(jiān)控即時運行狀況。Zabbix是一種基于Web界面、提供分布式系統(tǒng)監(jiān)控功能的企業(yè)級開源解決方案,采用C/S模式采集數據,監(jiān)控主機上安裝代理,通過Agent發(fā)送監(jiān)控數據,網絡設備不僅可通過SNMP方式采集,還可以由SSH、Telnet、IPMI、JMX等多種渠道采集,將采集到的數據通過網絡傳輸給服務端,然后服務端把數據存儲于數據庫中,再對數據進行分析處理[11]。本文調度策略使用代理模式,需要在虛擬機模板中提前植入代理,通過代理采集虛擬機的CPU利用率、內存利用率、磁盤利用率、網絡利用率作為虛擬機負載指標。
由于整個云計算平臺的復雜性和多樣性,一個良好的資源調度策略能夠讓云計算平臺發(fā)揮更大的計算能力,提供高質量的服務,降低數據中心能耗?,F有資源調度策略在某些方面有獨特優(yōu)勢和特點,但是對于不同的數據中心和應用場景,調度策略不能夠照搬,必須按照當前環(huán)境配置不同的參數以達到最優(yōu)解。資源調度的最終目標是提高服務質量QoS(包含網絡帶寬、服務性能、系統(tǒng)可靠性),使系統(tǒng)負載均衡[12](異構資源整合之后實現提高系統(tǒng)的吞吐量,降低處理性能,提高服務質量),自動化調整機制(能夠實現自動化負載均衡,為系統(tǒng)提供自適應調整能力,減少人工維護成本)。因此本文提出兩種策略:資源分配均衡策略和資源運行時動態(tài)調度策略。
資源分配均衡策略指在虛擬資源分配階段不僅要保證虛擬機創(chuàng)建任務能夠得到及時響應,也要保證虛擬機創(chuàng)建之后各個主機之間的負載能夠保持基本平衡。
當有資源分配任務時,任務調度器根據輪詢算法[13]把任務依次分配到不同控制節(jié)點上,減少不同控制節(jié)點的負載,同時多個控制節(jié)點也能夠保證系統(tǒng)高可用性,確保系統(tǒng)能夠一直提供服務。多個控制節(jié)點同時執(zhí)行任務可以保證用戶請求能夠在最短時間內得到相應的服務器處理。對于任務分配采用結合優(yōu)先級高低、先到先分配的原則進行處理,既確保服務的公平性,也能夠保證特殊任務的服務質量優(yōu)先級。
選擇計算主機的時候需要考慮諸多因素,包含Fram(主機內存的資源剩余情況)、Fcore(主機核數資源的剩余情況)、Fdisk(主機磁盤的剩余情況)、Finstance(主機虛擬機數目)、Fmonitor(主機監(jiān)控采集到整體負載情況),根據以上5個指標分配占用權重,計算主機優(yōu)先級為:
Pi=Fcore*Wc+Fram*Wr+Fdisk*Wd+
Finstance*Wi+Fmonitor*Wm
(1)
其中Wc+Wr+Wd+Wi+Wm=1,可以根據使用場景對CPU、內存、磁盤、負載情況等不同因素的需求,靈活設置權重,增加對應種類的資源對整體優(yōu)先級的影響比重。創(chuàng)建虛擬機時首先采集所有主機的優(yōu)先級指標,然后根據設定的權重因子計算不同主機優(yōu)先級,分別為P1、P2、……、Pn,其中Pi值越小優(yōu)先級越高,根據創(chuàng)建虛擬機數目選擇Top M作為創(chuàng)建目標,同時也要考慮選擇對應主機之后帶來的影響,確保負載變化不會太大。分配虛擬機資源時,對虛擬機業(yè)務場景做標簽分類,然后根據虛擬機應用的業(yè)務場景進行基本預測。例如計算密集型的應用會更加關注內存和磁盤信息,CPU使用較多,使內核權重因子變大;在主機分配過程中對虛擬機業(yè)務進行基本分類,結合宿主機整體負載狀況,一方面可以讓虛擬機發(fā)揮更大性能,為用戶提供更加優(yōu)質的服務,另外可以充分利用系統(tǒng)資源,保證系統(tǒng)資源能夠實現均衡分配和合理調度。
圖2 資源分配策略
云平臺上的虛擬主機面對各種任務,隨著時間的變化,虛擬資源負載情況會產生較大變化,導致物理主機負載出現不均衡?;谠搯栴}本文提出一種資源運行時的動態(tài)調度策略。
3.2.1 資源動態(tài)調度模型
資源調度、分配問題涉及多個資源分配和規(guī)劃,屬于NP完全問題[14]。結合系統(tǒng)存儲的歷史負載數據及當前實時負載狀態(tài),尋找一種既能夠實現資源負載均衡分配的約束,又能盡量避免虛擬機動態(tài)遷移的方案,同時還要避免虛擬機不停被遷移時出現系統(tǒng)抖動。調度算法具有很好的全局收斂性,可以在資源負載均衡和虛擬機遷移代價之間尋找一個最優(yōu)解[15-16]。
系統(tǒng)主要監(jiān)控指標包含CPU負載、內存負載、磁盤使用情況、網絡流量,為每個負載因子賦予權重,主機綜合負載Load可表示為:
Loadi=Loadcpu*Wcpu+Loadmem*Wmem+
Loaddisk*Wdisk+Loadnet*Wnet
(2)
其中,Wcpu+Wmem+Wdisk+Wnet=1,通過代理采集物理機及虛擬機各項監(jiān)控指標,計算綜合負載值,同時對每個主機負載進行排序。公式(2)能夠把抽象、零散的各項指標數值整合為綜合負載信息,負載因子和值為固定值,但各個指標值可隨實際業(yè)務需求變化。根據當前集群運行的業(yè)務類型情況進行靈活配置,能夠滿足云上復雜的業(yè)務類型。為了實現資源運行時的動態(tài)調度,本文主要依賴兩種不同的主機負載信息:時負載信息和歷史負載信息。
(1)即時負載信息。主機當前負載信息是主機短時間內的負載均值,監(jiān)控代理采集指標的時間間隔為T,采用最近N次采集的數據按照公式(2)分別計算其綜合負載值,然后求取平均值為當前負載值。采用多次負載值求取平均值,能避免在監(jiān)控代理采集數據時系統(tǒng)瞬時負載過高,影響采集結果的正確性。使用即時負載信息是為確保當某一主機在某一段時間內發(fā)生大規(guī)模流量訪問時,系統(tǒng)能夠實時監(jiān)控到負載信息的變化,根據資源調度策略進行資源遷移,確??煽?、穩(wěn)定的云服務。
(2)歷史負載信息。歷史負載信息主要存儲主機的歷史監(jiān)控指標。首先將歷史監(jiān)控信息記錄下來,然后按照時間間隔T作為歷史負載信息的時間周期,對每兩個時間點間采集到的各項監(jiān)控指標進行處理,求取各項監(jiān)控指標的平均值,作為該時間段內的主機負載值,同時保留時間信息。經過處理之后可以獲取一天內任意某個時間段的主機負載指標及主機一天之內的負載變化規(guī)律,為主機負載預測提供歷史數據。
3.2.2 資源動態(tài)調度策略
(1)實時負載均衡策略。由于系統(tǒng)負載隨著時間會發(fā)生很大變化,本文實時負載策略主要用于云計算平臺運行的整個過程。按照實時監(jiān)控的CPU、內存、磁盤以及網絡流量的負載信息,根據一定的策略完成每個周期內資源調度。在已經運行的系統(tǒng)中按照每次間隔時間執(zhí)行一次實時負載均衡策略,在每個周期內計算物理主機實時綜合負載,當綜合負載的值超過設定的負載閾值后,需要執(zhí)行調度策略。其中以下問題需要重點關注:一個調度周期需要遷移多少臺以及選擇哪幾臺虛擬機遷移才能使得遷移代價最小,同時實現服務質量保證和遷移次數最小的一個折中考慮;遷移的目標主機如何選擇,以確保遷移之后目標主機負載不出現抖動,以免產生新的高負載主機,造成無用遷移。
圖3 實時負載均衡策略流程
實時負載均衡策略為周期性任務,如果一個調度周期性遷移的虛擬機數目太多,會占用大量網絡帶寬,產生不必要的資源消耗。如果一個調度周期內遷移數目太少,則可能需要進行多個周期調度才能實現負載均衡,且時間過長,不能及時對系統(tǒng)負載突變產生及時響應。遷移數量需要根據當前負載情況決定,通過運維監(jiān)控系統(tǒng)可以了解系統(tǒng)內計算主機以及虛擬機負載情況,因此負載的整體情況決定每個周期內遷移的虛擬機數目不能一成不變,需要根據實際情況動態(tài)調整。通過實驗結合數據中心的實際運行情況,可以得出虛擬機在實際遷移過程中如果涉及到數據遷移(采用非共享存儲的模式),會占用大量網絡帶寬,因此本文對虛擬機遷移提供專用網絡,不占用虛擬機業(yè)務網帶寬。遷移時主機選擇也是一個重要因素。主機資源分為冷資源和熱資源,由于主機運行的任務類型各式各樣,運行任務的目的也各有不同,因此會存在冷熱之分。冷資源指主機提供的服務訪問頻率低、系統(tǒng)負載總是保持在較低值;熱資源指主機提供的服務訪問頻率高,主機負載一直處于或者在某一特定的時間段內負載值較高,因此需要記錄虛擬機結合時間維度的冷熱狀況。
選擇某一臺負載超標的計算主機,計算各項負載在閾值之上超出的數量為Mi=Mcpu*Wcpu+Mmem*Wmem+Mdisk*Wdisk+Mnet*Wnet,其中M代表超出閾值的數量。需要對該主機之上虛擬機的負載進行排序,首先選出該時間段的冷資源,遷移雖然能夠確保服務不中斷,但是還是會產生短暫的服務不響應,影響虛擬主機服務質量,遷移冷資源不會對正在物理節(jié)點運行的虛擬主機提供的服務產生太大影響,同時也能避免熱資源沖突,以免服務器壓力過大,因此選擇遷移冷資源。遷移主機的數量根據超出閾值的負載量而定,從負載最高的冷資源往下確定遷移主機的數量。確定完需要遷移虛擬機的物理主機以及需要遷移的虛擬機后,選擇目標主機。需要從負載最低的物理機開始選擇目標主機,通過算法模擬遷移之后的負載變化,始終選擇負載最小的物理機進行遷移。在模擬過程中,首先選擇負載最小的物理機遷移一臺虛擬機,然后整體物理機服務發(fā)生變化,重新對集群內物理機負載進行排序,選擇負載最小的物理機進行下一次遷移,以此類推,確保集群整體不會發(fā)生震蕩,也可以一次性標記完所有虛擬機遷移目標。
(2)預測負載遷移策略。實時負載均衡策略作為一種短周期性的策略能夠避免某些服務突發(fā)訪問量帶來的負載壓力,為減少實時負載策略的虛擬機調度數量,提出一種長周期基于虛擬機負載預測的主機調度策略。
通過監(jiān)控代理不間斷采集虛擬主機負載情況,隨著時間累計,可以采集到每天每個時間段的主機負載,收集物理機主機及虛擬主機負載情況。把主機在一天指定時間段作為一個定點,可以收集到該時間點內,在若干天內的變化趨勢或者變化規(guī)律,預測未來變化趨勢。
未來負載預測[17-18]有幾種通用的算法。其中,線性回歸(Liner Regression)、邏輯回歸(Logistic Regression)、多項式回歸(Polynomial Regression)主要用于擬合數據點的曲線,橫軸表示連續(xù)時間間隔,縱軸表示預測時間段內在一定時間段的平均負載。在本系統(tǒng)采用傳統(tǒng)BP神經網絡結合ARIMA算法[19],預測未來一天的主機負載情況和時間變化序列。隨著時間的不斷累積,可以得到的歷史數據會越來越多,可以使用大量的歷史數據構建出訓練模型。通過時間預測,可以推測未來各個主機的負載變化情況和各個時間段內的冷熱資源,盡量合理地將負載分配到各個服務器節(jié)點,按照系統(tǒng)冷熱時間錯峰分配主機,一方面能夠確保主機性能最大限度發(fā)揮,另一方面夠避免在同一個時間段內同一個主機內出現較多的熱資源,以免產生資源競爭沖突[20]。預測負載遷移策略執(zhí)行一次可能會需要更多時間,損耗更多資源,因此執(zhí)行頻率更低。另外還需要從監(jiān)控數據中預測在一段時間內系統(tǒng)整體負載最低的時間點,時間段可以以周或月為單位進行預測。
本文提出一套完整的云計算系統(tǒng)資源調度策略以確保云計算平臺服務質量,結合實際生產環(huán)境進行驗證,但是由于不同數據中心環(huán)境差異性較大,實際運行的業(yè)務系統(tǒng)類型也存在巨大差別,因此具體參數需要根據實際環(huán)境進行調整。云計算系統(tǒng)資源調度自動化執(zhí)行是未來發(fā)展趨勢,結合人工智能等相應的算法能夠讓算法在歷史數據中不斷學習,提高系統(tǒng)內部資源調度的合理性。