張燕麗
(廣東農工商職業(yè)技術學院 計算機科學系,廣州 510507)
網(wǎng)格技術作為20世紀90年代中期出現(xiàn)的新技術,將異地或異構的計算機組成集群,當作一個單一虛擬系統(tǒng)或者一個虛擬組織,他為廣義的資源共享系統(tǒng)的建立奠定了有效而可靠的基礎[1]。一般而言.網(wǎng)格系統(tǒng)被分類為三個主要的范疇:計算網(wǎng)格、數(shù)據(jù)網(wǎng)格和服務網(wǎng)格[2]。目前,服務網(wǎng)格 (Grid Services)正以爆炸式的增長勢頭向前發(fā)展。在眾多Web Service服務中,有許多如大型的網(wǎng)絡考試、網(wǎng)絡報名、網(wǎng)絡查詢等服務,存在用戶數(shù)量多、分布地域廣、訪問并發(fā)時間集中等特點。需要提供服務器集群,統(tǒng)一對外提供服務??紤]到用戶分布和服務并發(fā)的不均衡性,不能使用簡單的集中式本地集群(Local Centralized Cluster),需要采取分布式異地集群(Global Distributed Cluster)的方式?,F(xiàn)實工作中,集群中的服務器的大多數(shù)為異構的,同時要求集群要有一定的擴充能力,能夠根據(jù)預計用戶的多少隨時增設服務器,來擴充整個系統(tǒng)的服務能力。異地性構的特性,使得服務調度與優(yōu)化問題成為網(wǎng)格技術中急需解決的關鍵問題。
在基于Web service的服務網(wǎng)格中,為適應對服務器的高性能、高可用性和靈活的擴展性等高要求,需要引入調度服務器,來充當服務任務的分配者(Service Dispatcher)和集群的管理者(Cluster Manager)[3]。引入調度服務器后,集群服務器對外具有唯一的IP,即調度服務器IP,也稱為集群地址。用戶訪問集群地址,調度服務器會在對用戶請求地址等信息進行分析后,從集群中根據(jù)一定的策略,確定提供服務的節(jié)點服務器,然后實現(xiàn)任務的調度。用戶不需知道具體提供服務的服務器是誰,可以說服務網(wǎng)格本身就是一種并行或分布式處理的系統(tǒng),其體系結構如圖1所示。
為了保證系統(tǒng)的高可用性和穩(wěn)健性,防止調度服務器故障造成服務無法正常進行,本系統(tǒng)在實現(xiàn)時采用雙機熱備技術,引入備份調度服務器,一旦主調度服務器發(fā)生故障,備份調度服務器立即接管相應的工作,保證系統(tǒng)的高可用性。
從圖1看,如果所有的的客戶訪問流量均通過調度服務器,調度服務器將成為整個系統(tǒng)的瓶頸。為此,必須采取一定的措施,保證在服務過程中流量不經(jīng)過調度服務器。在本系統(tǒng)的具體實現(xiàn)中,采用HTTP重定向技術(圖2)。
圖1 調度系統(tǒng)的體系結構示意圖
圖2 HTTP重定向工作過程
HTTP重定向是指調度服務器在接收用戶的HTTP請求后,指示用戶用另外的一個URL去獲取請求內容,由該URL對應的服務器來響應這個請求,提供服務[4]。該方法在調度分配后,會在用戶和真正提供服務的節(jié)點服務器之間直接建立新的連接,并通過該連接為用戶提供服務。所以,調度服務器僅在服務的最初進行任務分配,在服務的過程中,流量將不再經(jīng)過調度服務器,從而大大降低調度服務器的負載,避免其成為整個系統(tǒng)的瓶頸。
服務網(wǎng)格中,服務器集群特殊的構建方式,勢必造成集群內各服務器處理能力和地理分布的差異。為了更加合理地把負載分配給集群內部的各個節(jié)點服務器,使用戶獲得最快的服務響應,得到最好的用戶體驗,調度策略要充分考慮服務的就近性和各節(jié)點服務器當前的負載狀況及處理能力差異。因此,需要對各服務器的負載進行監(jiān)控,并采取一些的算法保證服務的就近性。
3.1.1 衡量節(jié)點服務器負載狀況的綜合指標
服務器的負載是否適中,根據(jù)管理員經(jīng)驗,可以從以下服務器指標對其負載進行評價:服務器的當前CPU利用率:CPUi;內存利用率:MEMORYi;磁盤空間利用情況:DISKi;對請求的響應時間:。
在本調度算法中,通過動態(tài)調整權重Ri來計算綜合負載(Integrated loadi):
由于各參數(shù)在反映服務器負載時,很難確定所占比重,在具體實現(xiàn)時,本系統(tǒng)采用靜態(tài)設置,動態(tài)修改的方式。先由管理員根據(jù)經(jīng)驗值設置權重及各指標上限。如可預設:CPU系數(shù)置為4,內存系數(shù)置為3,響應時間置為2,磁盤系數(shù)置為1,CPU占用應在50%以下,超過70%,則可認為服務器無法正常工作;其內存占用與磁盤占用應在80%以下;同時響應時間應在100 ms以內。當服務過程中,監(jiān)控到某節(jié)點服務器參數(shù)超出指標上限時,由系統(tǒng)自動將其權重置為最大值100。從而使該節(jié)點服務器的綜合負載遠大于其他節(jié)點服務器。
根據(jù)調度服務器采集的數(shù)據(jù)分析,當某節(jié)點服務器某些參數(shù)超出正常值(如CPU占用達到70%)且居高不下時,可判定該服務器單點失效,從而進行故障切換,將該節(jié)點服務器的服務連接轉到負載較低的節(jié)點服務器,以保證服務的繼續(xù)進行。
3.1.2 節(jié)點服務器負載信息的采集
節(jié)點服務器負載參數(shù)的采集,由各節(jié)點服務器自行通過本地的負載信息采集程序(MonitorClient)調用Windows操作系統(tǒng)的Performance Logs and Alerts(性能日志和警報)服務來獲取本地的CPU利用率、內存利用率、磁盤使用率等系統(tǒng)性能信息。并形成數(shù)據(jù)包,定期傳遞到調度服務器,也就是監(jiān)控服務器。
3.1.3 定期匯報制度及動態(tài)負載表的生成
調度服務器在進行任務分配時,需要了解各節(jié)點服務器的負載狀況,從而避免將任務分配給超負載的節(jié)點服務器。因此,調度服務器需要隨時了解各節(jié)點服務器的最新負載狀況。為此本系統(tǒng)通過調度服務器端的負載信息收集與監(jiān)控程序(MonitorServer),在調度服務器與各節(jié)點服務器之間,建立了定期匯報制度,各節(jié)點服務器每隔10 ms向調度服務器報告其各參數(shù)值,同時調度服務器定期通過主動探詢獲取各服務器的節(jié)點網(wǎng)絡響應時間,并在調度服務器中形成“動態(tài)負載表”,以便調度服務器即時掌握并監(jiān)控各節(jié)點服務器的當前負載情況,并在分配用戶請求時,做出均衡選擇,以保證服務的質量。調度服務器除要完成服務任務分配的工作之外,首先要完成各節(jié)點服務器的負載監(jiān)控。因此,調度服務器也成為監(jiān)控服務器。
服務的就近性,是指網(wǎng)絡距離的就近性[6]。就服務就近性判斷問題,本系統(tǒng)討論了3種方案:
方案1:理想的就近性參數(shù)-網(wǎng)絡延遲和路由器跳數(shù)。通過比較提供服務的服務器到用戶的網(wǎng)絡延遲或所經(jīng)過的路由器跳數(shù)來衡量服務提供的遠近[7]。這樣方案在理論上是比較理想的,在實現(xiàn)上受到各種因素的制約,如防火墻。所以在具體實現(xiàn)上存在一定難度。
方案2:仿照靜態(tài)路由,建立就近表。在具體應用時,當服務請求到達時,可利用預先設置的IP數(shù)據(jù)庫(該數(shù)據(jù)庫須不斷更新),判斷用戶地理情況,從預先設置的服務就近表,查表返回就近的服務器。靜態(tài)就近表,由網(wǎng)絡管理員靜態(tài)配置,按照已知的服務器分布情況,給相應的IP范圍設置3個就近的服務站點IP,每個站點有不同的優(yōu)先級。
方案3:動態(tài)就近表的建立與使用動態(tài)就近表,可以仿照路由器的動態(tài)路由表的建立方式,通過動態(tài)學習的方式取得。當一個用戶請求到達調度服務器時,調度服務器會通知集群中的各應用服務器,請他們檢查各自站點到該用戶的網(wǎng)絡往返時延。各應用服務器檢測后,將結果發(fā)回調度服務器,調度服務器從中選擇最短時間對應的3個服務器做為推薦就近服務器,并由此建立動態(tài)就近表。
考慮到設計實現(xiàn)的可行性,本系統(tǒng)采用第2套方案,由網(wǎng)絡管理員根據(jù)已知服務器分布,建立靜態(tài)就近表,形成IP數(shù)據(jù)庫。服務請求到達時,通過檢索IP數(shù)據(jù)庫,確定服務請求發(fā)出的地理位置,并通過檢索靜態(tài)就近表,確定推薦的3個就近服務器。
本系統(tǒng)具體調度算法是在就近的基礎上,參考節(jié)點服務器的負載狀況,選取最佳服務器。節(jié)點服務器端:周期性地獲取自身的負載參數(shù);周期性將負載參數(shù)形成“報告包”,向調度服務器報告各自的負載情況;響應由調度服務器轉發(fā)的客戶機請求。
調度服務器(也稱監(jiān)控服務器)端:周期性對各節(jié)點服務器定期報告的負載信息進行收集;周期性通過主動探詢獲取各節(jié)點服務器的網(wǎng)絡響應時間;周期性更新動態(tài)負載表,計算并更新各結點服務器的綜合負載指標;新服務請求到達時,查靜態(tài)就近表獲得推薦的三個節(jié)點服務器IP及其優(yōu)先級;從監(jiān)控形成的動態(tài)負載表中,獲取三個推薦服務器的負載實際水平;檢查推薦的各服務器負載是否超出上限;若均超出上限,則將請求轉發(fā)到動態(tài)負載表中綜合負載指標最低的的節(jié)點服務器;否則,將請求轉發(fā)到綜合負載指標最低的推薦服務器。
本系統(tǒng)主要使用C++平臺開發(fā),采用Client/Server架構。節(jié)點服務器端主要完成負載信息采集和提供WEB服務;調度服務器本身也是節(jié)點服務器監(jiān)控平臺,除提供對各節(jié)點服務器負載監(jiān)控外,主要完成任務調度,系統(tǒng)管理,基本參數(shù)配置等功能。
負載信息采集程序:主要負責本服務器負載信息的定時采集,包括CPU利用情況、內存利用情況、磁盤空間利用情況,并定時向調度服務器報告其動態(tài)采集的負載信息。要獲得各服務器節(jié)點的負載信息,可以在各服務器結點端安裝的MonitorClient程序。通過調用Windows操作系統(tǒng)的Performance Logs and Alerts(性能記錄日志及警報)服務來獲取CPU利用率、內存利用率、磁盤使用率等系統(tǒng)性能信息。
(1)負載信息收集與監(jiān)控模塊-MonitorServer。主要負責收集各節(jié)點服務器定時發(fā)來的負載匯報信息;定期檢測各節(jié)點服務器的響應時間;將各節(jié)點服務器的CPU利用情況、內存利用情況、磁盤空間利用情況、服務響應時間等信息匯總顯示,并對超負載的服務器特殊處理。
本系統(tǒng)中,各服務器節(jié)點和調度服務器之間的通訊為TCP/IP通訊。各服務器節(jié)點通過本地安裝的MonitorClient程序來獲取本地CPU利用率、內存利用率、磁盤使用率等系統(tǒng)性能信息,并定時向調度服務器匯報;而調度服務器定期通過主動探詢獲取各服務器的節(jié)點網(wǎng)絡響應時間。
為了取得各服務器節(jié)點的相關信息,同樣需要將調度服務器和集群中的各服務器結點一一建立通信關系。因此,在調度服務器端安裝好MonitorServer程序,也必須在同一目錄下建立其配置文件Server.ini,指定各自的IP和及通信端口。調度服務器,主要用于監(jiān)控集群中各服務器節(jié)點狀態(tài),并收集顯示各服務器節(jié)點的以下信息:機器名、IP地址、CPU利用率、內存利用率、磁盤使用率和網(wǎng)絡響應時間等。并將收集到的信息形成動態(tài)負載表。
(2)系統(tǒng)配置和管理模塊-Configuration&Management。決策模塊:主要負責根據(jù)就近表和監(jiān)控模塊取得的各服務器節(jié)點負載信息,調用負載均衡算法進行決策,確定由哪個服務器節(jié)點為用戶請求提供服務,返回服務器節(jié)點IP。
其具體功能包括:靜態(tài)就近表的建立;負載參數(shù)權值與上限的設置與修改;服務器故障切換等服務。
(3)調度決策模塊-ServerDecision。在調度服務器端,除了要設計監(jiān)控程序,以實現(xiàn)對集群中各服務器節(jié)點的狀態(tài)監(jiān)控,獲取各服務器節(jié)點的動態(tài)負載參數(shù)外,當一個真正的服務請求到達時,還要進行負載均衡,選擇最恰當?shù)姆掌鳎瑢φ埱筇峁┳罴训胤?。因此在調度服務器上還要設計1個ServerDecision程序,用于確定服務的提供者IP。
服務請求到達時,通過檢索就近表,提取推薦的就近服務器,利用加權算法從3個推薦站點中找加權計算結果最小的服務站為用戶提供服務。若3個推薦站點均不可用,則選擇MonitorServer中,當時負載最低的服務站點為用戶提供服務。最后返回確定提供服務的服務器IP。
(4)請求轉發(fā)模塊-Despatcher。該模塊主要負責在請求到達時,取得客戶端IP;調用決策模塊取得提供服務的節(jié)點服務器IP(即 getIP,使用 Request.ServerVariables("REMOTE_ADDR")[8]來取得客戶端的 IP地址),并將服務請求利用HTTP重定向的方式轉發(fā)到?jīng)Q策模塊所確定的服務器IP(即Redirector,調用ASP中的重定向方法Response.redirect(),讓瀏覽器立即重定向到程序指定的IP地址[9])。
本系統(tǒng)首先完成了服務網(wǎng)格中的節(jié)點服務器的監(jiān)控功能,調試服務器本身也成為了監(jiān)控服務器,實時對各結點服務器的負載狀況進行監(jiān)控。同時,做為調度系統(tǒng),本系統(tǒng)的調度策略,充分考慮了網(wǎng)格中各節(jié)點服務器的處理能力的差異和地理分布的差異,更加合理地把負載分配給集群內部的節(jié)點服務器,使用戶獲得最快的服務響應。該系統(tǒng)的優(yōu)點是具有靈活的擴展性;避免服務器單點失效造成地區(qū)性系統(tǒng)癱瘓;其調度服務器的雙機熱備技術保證了整個系統(tǒng)運行的穩(wěn)定性。
[1]吳永和,馬曉玲.基于數(shù)據(jù)網(wǎng)格的教育資源服務系統(tǒng)的實現(xiàn)[J].華東師范大學學報:自然科學版,2006(8):26-27
[2]楊昭昭,黃必清.基于Web服務的應用網(wǎng)格體系結構研究[J].計算機應用研究,2005(7):125-127
[3]王學智,劉罕杰,孫正民.基于BP網(wǎng)絡的裝備維護人員保障能力評估[J].四川兵工學報,2010(4):4-7
[4]武光明.ASP.NET應用程序中網(wǎng)頁重定向及其數(shù)據(jù)傳遞技巧[J].黑龍江科技信息,2008(10):67-69
[5]胡凱,馬雪潔,鄧可.網(wǎng)絡機群計算的負載指標研究與實現(xiàn)[J].計算機工程與設計,2007(7):150-153
[6]吳蔚.網(wǎng)絡站點的負載均衡技術探索[J].計算機時代,2004(7):29-32
[7]王傳殊,王意潔.基于網(wǎng)絡延遲的P2P路由算法的研究[J].計算機科學,2007(8):27-32
[8]RUSSELL A.ASP.NET與VB.NET從入門到精通.高春蓉,谷宇等譯.第1版.電子工業(yè)出版社,2002
[9]DOUGLAS E.TCP/IP網(wǎng)絡互連第3卷客戶/服務器編程及應用Linux/POSIX Sockets版[M].北京:人民郵電出版社,2002