蔣漪漣
云計算資源共包含兩大類,一類是指物理計算機、物理服務器以及必要的網路設備和存儲設備形成的物理集群。另一類是是通過虛擬化技術在物理計算實體上生成的虛擬機以及由多個虛擬機組合形成的虛擬機群[1]。云計算的資源系統就相當于是多種異構的資源組織起來,形成一個大的資源集合并向上層提供特定、多樣的執行環境[2]。對這樣的資源系統的管理在很大程度上決定了云計算平臺所提供的服務質量[3]。
從云計算體系結構上來看,云計算系統的后端,有成千上萬的服務器,在服務器上又運行著大量的或虛擬或物理的計算資源,如何將如此大量的服務器有效地組織、管理,是云計算系統高效穩定運行關鍵問題之一[4]。
云計算的一大優點在于可以提高虛擬資源與物理資源的資源利用率。若無資源管理調度,對資源進行統一分配和無規則調度對于擁有大量資源的云端來說是不合適的,除了效率低下以外,還會造成資源使用混亂。只有對計算資源進行統一管理,根據不同的業務實施靈活的配置方案、消除瓶頸、提高生產率和對業務服務的響應水平;可以降低運營大型分布式環境的相關人力成本。
VCCP (Virtual CloudComputing Platform)是一套能夠管理虛擬計算資源,管理虛擬計算任務,能夠根據資源和任務的實際情況和需求進行按需聚合與協同,并能夠對平臺外部提供開放通用服務接口的軟件系統。本系統是建立在VCCP之上的,VCCP的核心設計思想是實現開放網絡中的存儲資源共享、數據資源共享、計算資源共享。
VCCP共分為用戶服務層、任務層、資源管理層和計算資源層四大層,并進一步分成六個子層,具體的層次結構關系,如圖1所示:

圖1 VCCP層次結構關系
(1)應用服務層。應用服務層分成兩個子層,應用層和表示層。應用層的功能是為用戶提供應用服務接口;友好的 UI界面;將相關業務邏輯按照表示層的接口將應用服務分割成為 VCCP中可執行的任務單元并提交給任務層進行處理。表示層主要是解決任務單元以及資源需求的描述問題。
(2)任務管理層。任務管理層負責任務的分割和匯聚。任務管理層應完成對任務隊列的維護和調度,即維護儲存任務信息的各種數據結構以及決定和優化任務執行順序;應完成任務生命周期管理,包括任務的分割、下發、執行和結果返回,以及相應任務狀態的發布。還應為管理人員提供對任務直接進行管理操作的接口,如任務的取消、暫停、恢復。
(3)計算資源層。計算資源層由若千計算資源匯聚而成。每一個計算資源是計算任務的執行者,并對外提供資源基礎服務,是提供資源服務的基本單元。計算資源層相當于資源代理,資源和管理系統的交互通過代理程序進行。
(4)運維支撐層。運維支撐層以資源管理層為數據源,對虛擬云計算系統的資源系統進行信息展示,動態監控和過載警報和異常定位;以任務管理層為數據源對虛擬云計算系統的所有任務進行狀態信息展示,分配流跟蹤和結果展示。
1.2.1 基于QoS的資源調度算法
資源調度策略當中使用的3種基于QoS的資源調度算法,分別是輪詢調度算法,隨機調度算法和最優調度算法。這3種算法都實現了任務QoS約束下的資源調度,并且3種算法理論簡單,實際實現也并不復雜。
(1)輪詢調度算法。輪詢調度算法是基于 Round-Robin調度算法實現的。其設計原理是每一次把任務輪流分配給云計算系統內的資源上,從1幵始,直到N(計算資源個數),然后重新開始循環。算法實現簡潔,一定程度上能夠優化系統負載率。在資源列表中維護一個Pos指示器變量,指示器指向列表中當前任務分配給的資源,下一次調度選擇位置 Pos后的第一個可用資源分配給任務。Pos初始值為1,當它達到列表尾部時,重新置為1。
(2)最優匹配調度算法。最優匹配調度算法的設計原理是每一次把任務分配給符合任務需求的資源列表中,評分最高的資源。當接收到一個任務需求時,遍歷當前符合任務需求資源集合S,根據任務需求對每一個計算資源做出評價,任務分配給評價最高的資源。
(3)隨機調度算法。隨機調度算法設計原理是當接收到一個任務需求時,隨機從符合任務需求資源集合S中返回一個資源。
1.2.2 QoS指導下的負載均衡調度算法
VCCP中的資源調度不僅需要支持QoS約束而且需要考慮資源系統整體的負載均衡。資源負載率度量方法。如公式(1)、公式(2)

公式(1)度量方法的缺點是每個負載維度對綜合負載度的影響均相同,算法不夠靈活。公式(2)度量方法為每個負載維度都增添了影響權重值,但是算法對權重向量的取值很敏感,一旦由于經驗不足導致參數設計不恰當,則會對算法性能造成巨大影響。
VCCP系統的任務管理層對每一個任務的 QoS約束共有5部分組成,分別是資源操作系統類型約束Q_os;資源CPU速率約束Q_cpu;資源可用內存約束Q_men;資源磁盤空間約束Q_disk以及資源網絡帶寬約束Q_net。所以在調度算法中一個任務ti的QoS約束條件Qi則可以表示成一個5元組:
Qi= {Q_osi,Q_cpui,Q_memi,Q_diski,Q_neti}.虛擬云計算平臺中有m 計算資源,資源集合記為C = {c1,c2,…,cm},與任務 QoS約束相對應,每一個計算資源具有一組約束指標信息和一組負載指標信息,即Cj={Rj,Lj}其中Rj= {R_osj,R_cpuj, R_memj, R_diskj, R_netj}分別表資源在操作系統、CPU、可用內存、磁盤空間和帶寬的約束指標。約束指標通常是資源的靜態描述信息。Lj= {L_osj, L_cpuj, L_memj,L_diskj, L_netj}分別表資源在CPU、可用內存、磁盤空間和帶寬的負載指標。負載指標通常是由資源的實時動態信息描述的,一般用百分率表示。
在本文提出 QoS約束下的基于任務偏好的負載均衡匹配調度算法中,任務的 QoS條件不僅是對選擇資源服務能力約束,還是度量資源負載度標準的組成部分之一。算法大致包含以下3個部分:首先依據任務QoS約束篩選資源;根據任務 QoS約束計算任務偏好值;資源綜合負載率的度量。
(1)篩選資源以匹配任務的QoS約束。即根據任務ti的QoS約束條件 Qi,匹配得到滿足 QoS的資源列表C={C1,C2,…Cj}(1≤J≤m)對任意 Cj∩C 都要滿足公式(3)

(2)任務偏好值的計算。任務偏好值定義為資源某一方面的指標影響任務執行與完成時間的程度。以CPU速率為例,任務對CPU速率偏好值越高,說明CPU速率對任務執行的影響越大,說明任務對CPU速率高的資源傾向性越強。本文提出的算法根據任務的 QoS約束以及資源在每個約束上的指標計算任務偏好值。其核心思想是以任務的 QoS約束值與系統資源指標的平均值的商做為任務偏好值。QoS約束越強,說明任務在這一方面要求越高,說明此因素對任務執行的影響越大,并且用 QoS約束值與系統資源指標的平均值的商作為QoS約束強弱的度量。結合以上計算思想,任務ti的任務偏好值 Pi= {P_cpui,P_memi, P_diski, P_neti}的計算方法,如公式(4)、公式(5)


(3)任務偏好值指導下資源綜合負載率的度量標準。把任務偏好值作為資源每一項負載率對綜合負載率的影響因子。仍以CPU速率為例。偏好值越大,說明任務對資源CPU速率越敏感,所以對這個任務來說,資源的CPU負載對資源的綜合負載率影響也越大。針對任務(資源的綜合負載率計算方法,如公式(6)所示

Loadij越小說明對于任務的偏好資源的負載越低,選擇Loadij最小的資源作為任務ti的匹配調度結果。算法流程描述如下:
1) 初始化QoS約束Q。
2) 遍歷所有資源列表,找出滿足公式(3)的所有資源列表C。若C為空跳轉6.
3) 依據公式(4)公式(5)計算得到任務偏好值.
4) 對資源列表C中的每一個資源,依據公式(6)計算得到資源的綜合負載度.
5) 選取綜合負載度最小的資源作為匹配調度結果返回.
6) 返回“無滿足約束條件資源”結果。
每一個資源匹配調度流程中,任務的 QoS約束是接受請求時獲得的,資源的約束指標在資源信息表的靜態信息中,負載指標在資源信息表的動態信息中,只需查詢數據庫即可獲得,所以算法需要計算的只有任務偏好值以及資源綜合負載率,算法的復雜度不高,可以滿足在線調度的要求。
某計算資源CR1要加入云計算系統,首先要向資源管理層進行注冊,注冊信息中包含CR1的基本靜態信息。此時資源管理層會獲得與計算資源 CR1通信的 IP地址和端口(CR1_IP和CR1_PORT),并以此作為CR1在系統中的唯一ID,注冊成功后返回 CR1這一 ID。此時意味著計算資源CR1成功加入了云計算平臺,即任務可以被分發到CR1上執行。注冊成功后,資源管理層要對資源 CR1的運行和使用狀態進行監控。為此根據注冊的CR1_IP和CR1_P0RT,定期到CR1處采集CR1動態信息,并將采集到的信息經過處理添加到或更新數據庫資源信息表中的動態信息部分。若由于網絡不通或調用采集接口失敗等原因導致采集動態信息失敗,則把 CR1標注為“暫不可用”,處于這個狀態的計算資源不會成為資源匹配調度的結果。若計算資源 CR1因升級、維修或報廢等原因要“離開”云計算系統,則需要用ID向資源管理層提出注銷請求。注銷成功后資源管理層會刪除數據庫中有關CR1的一切數據。
用戶提交一個應用job,應用任務層分割應用為若干子任務片 tasks,預存在等待調度的任務隊列中。對任務隊列隊頭任務如 taskl,任務管理層調用資源管理層提供的任務資源匹配接口,以期得到執行此任務的資源 ID。資源管理層根據taskl的資源需求描述,根據數據庫資源信息表中所有計算資源的靜態、動態信息,結合制定好的資源調度策略,得到執行這個任務的計算資源CR1,并返回任務管理層這個計算資源 CR1的資源 ID:IP地址(CRl_IP)和端口(CR1_P0RT)。得到執行資源后,taskl進入任務下發隊列,待taskl出隊時,任務管理層根據CRl_IP和CR1_PORT把任務taskl分發到這個計算資源上進行執行,完成任務下發。CR1完成任務后會根據配置把任務結果返回給任務管理層。
為實現上述算法集成方案和系統主要接口功能,資源管理系統模塊設計方案,如圖2所示:

圖2 資源管理系統模塊設計圖
資源管理系統可以分為:注冊注銷模塊、資源監控模塊、資源匹配與調度模塊、管理節點監控調度模塊、發布模塊以及數據庫。
注冊注銷模塊實現資源的組織策略,主要為計算資源層的計算資源提供注冊注銷接口。
資源監控模塊集成資源監控算法,負責實現資源監控。主要完成資源的動態信息采集,根據動態信息完成部分指標的評估和相應后臺優化,并把資源的動態信息寫入數據庫。
資源匹配調度模塊集成資源調度算法,負責對多種資源調度算法的實現。并且需要幵放資源調度調用接口,根據制定好的策略算法完成資源調度,并將結果返回給應用任務層。
管理節點監控調度模塊完成多個管理節點信息的生成和入庫,并在分布式管理系統當中完成管理任務的分配和遷移以及多個管理節點的調度。
發布模塊實現資源信息發布策略。負責把資源管理層管理的所有計算資源信息通過XML文件形式發布到云計算系統中的指定位置。發布的信息可以為第三方的監控管理軟件提供數據源,并方便管理人員查詢歷史數據或隨時,查看云計算系統中所有計算資源的運行狀態。
資源的組織就是資源管理系統要為資源提供加入和退出云計算平臺的注冊和注銷接口。這兩個接口是在圖2中注冊注銷模塊當中實現的。對于注冊具體應實現的功能有:開放調用注冊方法的RFC監聽端口;驗證輸入資源IP地址和端口是否合法,是否己記錄在數據庫中;把注冊成功的資源靜態信息添加到資源信息表中,返回注冊成功信息和資源注冊ID。注冊算法設計如下:

新資源加入云計算平臺,需要調用注冊注銷模塊提供的資源注冊接口。資源管理子系統需要將注冊接口聲明在注冊注銷模塊中。注冊接口的thrift聲明如下:

(1:exception.InvokeException e)。ip 是計算資源 IP 地址。rpcPort是計算資源的RPC端口,同時也是計算資源提供的網絡通信端口。
Staticinfo是計算資源在注冊時需提供的靜態信息,其類型是StaticInfoSeq. StaticInfoSeq類型描述的資源信息都是靜態描述信息,這些信息一經注冊后不能改變。
資源注冊成功和失敗的信息以 XML字符串形式返回,返回信息實例格式如下:

資源離開云計算平臺之前,需要調用注冊注銷模塊提供的資源注銷接口。資源管理子系統需要將注銷接口聲明在注冊注銷模塊中。
在組織起資源系統后,就需要對所有的資源進行監控。資源監控可以分為兩個部分:系統內部監控和系統外部監控。系統內部監控是資源管理系統對云計算平臺內的計算資源的運行狀態和資源使用情況進行自動監控。圖2的資源監控模塊完成此功能,資源監控算法也集成于此模塊當中。
數據單元和緩沖區是生產者和消費者之間唯一的聯系,在多線程應用環境中,緩沖區操作需保證線程安全。為了實現方便,資源信息采集與評估模塊的緩沖區采用JDK1.5引入的ArrayBlockingQueue數據結構。
為了保證緩沖區的共享和唯一,生產者要以緩沖區初始化。根據系統規模,支持多個生產者共同工作,所以生產者需實現Runnable接口以實現多線程。生產者根據資源管理節點的ID查詢數據庫,得到本節點負責釆集的計算資源列表,再將列表中的計算資源ID依次寫入緩沖區中。主要功能代碼如下:


數據單元入隊時采用的是 ArrayBlockingQueue.put方法。該方法會判斷隊列是否有空間完成如對操作。如果該隊列已滿,則阻塞等待可用的空間出現,并釋放對象鎖。這樣的阻塞等待機制會最大限度提升資源信息采集的性能。
對于消費者同樣要以緩沖區初始化,同樣要實現Runnable接口以支持多線程。消費者用ArrayBlockingQueue.take方法從緩沖區以阻塞方式獲取對頭數據單元,調用相應資源提供的采集動態信息接口 get-DynamicInfo,返回資源動態信息字符串resourceDynamicInfo。若調用不成功或無返回值說明資源暫時不可用,更新數據庫中該資源的狀態。若調用成功,解析resourceDynamicInfo,更新數據庫中該資源的動態信息。
程序實現關鍵代碼實現如下:



外部資源監控是指定期的將數據庫中的資源信息、軟件服務信息以及資源管理節點的信息以某種形式發布,為其它第三方監控管理軟件提供信息源,實現系統外部的資源監控以及如統計等更多功能的擴展。這部分功能是在圖2中的信息發布模塊中實現。
資源管理系統提出了一種 QoS指導下的負載均衡資源調度算法。該算法能夠支持用戶任務在CPU、內存、磁盤、帶寬以及操作系統五個維度的QoS約束,并在任務QoS約束指導下完成各個維度權重值計算,進而完成計算資源綜合負載率的計算。算法不需要預設綜合負載率中各個維度的權重值,降低了算法對權重經驗值的敏感度。同時算法根據不同的任務重新計算資源的綜合負載度,實現了動態均衡。
[1]田文洪,趙勇.云計算:資源調度管理[M].第一版. [M].北京.國防工業出版社.2011.7
[2]王敏,李靜,范中磊.一種虛擬化資源管理服務模型及其實現[J].計算機學報.2005.28(5).856-863.
[3]袁文成,朱怡安,陸偉.面向虛擬資源的云計算資源管理機制[J].西北工業大學學報.2010. 28(5).704-708.
[4]鄧自立.云計算中的網絡拓撲設計和 Hadoop平臺研究[D].合肥:中國科學技術大學.2009. 4.