趙陽
(中國石油大學(華東)計算機與通信工程學院,山東青島266555)
與傳統的計算密集型的科學計算不同,目前的搜索引擎、電子商務、企業辦公自動化以及社會網絡等流行的網絡服務基于一種數據密集型的計算模式。這種類型的應用一般需要超大規模的并行計算處理,由用戶的請求激發后臺服務器的響應處理。計算能力達每秒千萬億次的巨型機或高性能的大規模集群能夠高效地運行計算密集型應用,但價格過于昂貴,利用率較低,不適用于數據密集型的應用[1],因此大多數企業會選擇購買中小型的服務器構建集群,并由系統管理員負責管理、維護集群的軟、硬件資源,部署相關的應用為企業內部或者外部的用戶服務。
企業在啟動新的研究項目時,都要估算用戶的訪問量和系統工作負載的峰值,并以此為依據確定集群的規模和服務器的數量。不幸的是,用戶訪問量和系統工作負載都是難以預測的,如果企業低估了它們,那么隨著網絡服務的訪問量不斷增加,有限的服務器由于長時間處于滿負載狀態,而無法及時響應用戶請求,延長用戶等待時間或者拒絕服務,將大大降低服務滿意度和質量,將最終導致用戶的流失。
相對的,如果企業高估了用戶的訪問量和系統負載,購買了多余的服務器,那么由于服務的訪問量有限,集群中的一部分資源會始終無法得到利用。與此同時,這些服務器耗費的網絡、冷卻、電力都很大程度地增加了企業的運營成本。
另一方面,用戶請求和系統負載始終是隨著時間而不斷變化的,例如企業辦公自動化服務的訪問量在上班、下班時間是完全不同的,而互聯網上的網絡服務更是每天、每月、每年都時刻波動的。正是因為用戶訪問量的這種時間變化性,才導致傳統的集群資源管理系統在訪問量不斷增加時出現資源負載過重的問題,而在訪問量有限的情況下出現資源利用率低下的問題。
現在的普通計算機配置越來越高,完全具備了中小型服務器的能力。企業工作人員使用的普通計算機通常只安裝日常的辦公處理、網絡通信、網頁瀏覽等應用軟件,無法充分利用這些強大的物理資源,利用率大多不足15%。如果能綜合利用企業內部大量普通工作計算機作為后備資源,在服務器負載過重時分擔處理用戶請求,而在服務訪問量不足時僅使用少量的服務器,就能有效解決現在企業資源管理系統存在的兩個重要問題。
本文設計了一個能夠靈活、高效的綜合利用企業集群服務器和普通計算機的資源管理系統ERMS(Enterp Resource Management System),該原型系統是基于Struts 2[2]、Spring[3]、Hibernate[4]及A jax[5]等輕量級Java EE開發框架的web應用,并實現了可以根據用戶請求量和系統負載變化,動態調整分配物理資源數量的企業資源調度算法DRSA(Dynam ic Resource Scheduling Algorithm)。

圖1 ERMS系統結構
ERMS企業資源管理系統主要由中心控制組件和企業資源池組成,企業、組織內部的服務器和普通計算機都部署了ERMS響應/監控服務器端程序,負責向信息中心注冊資源的軟、硬件配置信息以及動態的負載狀態,從而形成由服務器和普通計算機組成的層次化企業資源池;中心控制組件是框架的核心,負責維護資源池主機元數據信息,響應用戶請求使用所需的資源、實時查詢資源狀態以及釋放資源等。
ERMS系統的中心控制組件主要由門戶網站、控制器、信息中心和調度器四部分構成。門戶網站主要提供用戶管理及為用戶提供查看、遠程操控、管理、監控資源的圖形化界面,屬于MVC模式的表現層,采用Struts 2Web應用開發框架實現,并無縫集成了Ajax技術,使用戶通過瀏覽器就可以完成以上操作;控制器和調度器構成了業務邏輯層,負責處理用戶請求,并及時返回響應信息;信息中心是MySQL 5[6]數據庫,屬于數據層,保存系統的所有相關信息數據,表現層和數據層的信息傳遞則利用Hibernate封裝的JavaBean實現。門戶網站與控制器、調度器進行前端表現層與業務邏輯層的分離,解耦了用戶界面顯示與網絡資源信息管理的具體實現,屏蔽了底層操作的復雜性,提高了系統的可擴展性、組件的可復用性;而數據層與表示層、業務邏輯層的分離保證了系統執行應用邏輯時全局信息視圖的一致性。
企業資源池,即由企業內部的集群服務器和普通服務器聚合在一起形成的層次化的資源集合。服務器和普通計算機要進入企業資源池為用戶服務,需要安裝服務端軟件――ERMS響應/監控軟件,既可以使管理員可以很好地管理本地資源、維護相關信息,又能夠與中心控制組件協同工作實現用戶對整個資源池中資源的遠程控制和管理。
響應/監控軟件基于BSD UNIX下的Socket網絡編程接口[7],使用C語言實現,以守護進程(Daemon)的形式在資源宿主服務器上運行,負責與ERMS調度器建立TCP/IP網絡連接交互信息。
根據用戶需求在企業資源池中查找、調度滿足條件的資源分配給用戶使用,是實現企業資源管理系統的關鍵問題。現有企業資源管理系統的調度機制在查找、匹配資源時沒有考慮宿主機系統負載對服務質量的影響,例如有用戶要將1GB的文件存儲在資源池的主機中,如果只考慮是否有足夠的空間,那么仍無法從根本上解決資源利用不均衡的問題。假設主機A共享了10GB的磁盤空間,而一段時間處于滿負荷工作狀態,而主機B僅共享了2GB的空間,卻一直處于空閑狀態。靜態的調度策略算法會優先選取主機A提供服務,那么網絡傳輸1GB文件的時間為200秒,而如果選擇主機B,傳輸時間僅為126秒。所以NRSA算法調度共享資源,在多個主機滿足用戶需求時,優先選擇最近一段時間內CPU負載較輕的主機。
因此,我們在企業資源管理系統ERMS的調度器模塊中實現動態的資源調度算法DRSA。算法可根據用戶的不同需要,綜合考慮企業內部服務器的能力及系統動態負載,進行資源的分配和調度,并且能夠在服務器能力受限的情況下,調度企業內部的普通計算機資源緩解服務器的負載壓力,從而提高系統的吞吐量、負載均衡和資源利用率。
根據圖1和算法描述,DRSA算法主要步驟如下:

為了驗證ERMS原型系統的功能性及DRSA算法在服務器能力受限的情況下,利用企業資源池中的普通計算機資源作為緩沖,協同處理用戶請求,提高整個系統吞吐量、性能以及促進負載均衡方面的效果,我們設計了相關的模擬實驗進行驗證。
實驗設定系統企業資源池由10臺服務器和10臺普通計算機構成,實驗初始化階段所有主機的工作負載由模擬器隨機產生。如果假定服務器每處理一個用戶請求,會使系統負載增長5%,則每臺服務器可以同時處理20個用戶請求;相對的,普通計算機每處理一個用戶請求系統負載會增加10%,則每臺普通計算機可以同時處理10個用戶請求。那么,10臺服務器能夠承載200個用戶的并發訪問,而綜合利用普通計算機則能夠使系統的訪問量達到300,系統的吞吐量和性能提高了50%。
ERMS系統接收到用戶使用資源的請求,首先調用服務器進行響應、處理,實驗設定系統負載閾值為60%,如果服務器負載高于60%,則認為服務器處于滿負載運行狀態,開始考慮使用普通計算機資源。圖2顯示的是某時刻,系統同時處理68個用戶請求各主機負載的變化情況,其中前10個數據柱表示服務器的負載變化,后10個表示普通計算機的負載變化。
通過上圖我們可以很清楚的看到DRSA算法能夠在服務器處于高負載時,根據負載變化,利用普通計算機處理12個用戶請求,從而很好地保持企業資源池的負載均衡和性能優化,避免“熱點”現象和資源閑置無法利用的情況。
雖然計算機技術發展迅速,但資源的利用率卻普遍很低,用戶訪問量的變化性使服務器同時面臨負載過高、響應時間增長和部分資源閑置兩個問題,企業內部的普通計算機更是具有了中下型服務器的能力卻只運行簡單應用,利用率甚至不足15%。針對以上問題,我們設計了企業資源管理系統ERMS,并實現了動態的資源調度算法DRSA,能夠綜合利用服務器和普通計算機資源,響應、處理用戶請求,提高整個系統的吞吐量、資源利用率,優化各物理資源的負載均衡。
[1] Figueiredo.R,Dinda.P,&J.Fortes.Resource Virtualization Renaissance[J],IEEE Computer(Special Issue On Resource Virtualization),2005(4),24-27.
[2] Ted Husted.Struts in Action:Building Web Applications with the Leading Java Framework.Manning Publications.2005.
[3] Craig Walls,Ryan Breidenbach.Spring in Action.Manning Publications,2008.
[4] Christian Bauer,Gavin King,Hibernate in Action,Manning Publications,2005.
[5] Dave Crane,Eric Pascarello,Darren James.Ajax in action.Manning Publications.2006.
[6] Michael Kofler.The Definitive Guide to MySQL 5,Third Edition.Apress.2006.
[7] Elliotte Rusty Harold.JAVA Network Programming,Third Edition.O'Reilly.2005.