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