《電子技術(shù)應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 業(yè)界動態(tài) > 基于GMA的網(wǎng)格監(jiān)控系統(tǒng)實現(xiàn)

基于GMA的網(wǎng)格監(jiān)控系統(tǒng)實現(xiàn)

2009-06-23
作者:楊道杰

??? 摘 要:介紹了Java本地接口方法JNI,,重點討論了利用JNI調(diào)用C/C++動態(tài)聯(lián)接庫,,實時監(jiān)控系統(tǒng)中硬盤、內(nèi)存,、CPU等資源的運行狀態(tài)的方法,,實現(xiàn)了Java與C/C++的互操作,。同時,通過在Web Service服務中調(diào)用JNI方法,,提取Web Service的遠程調(diào)用功能,。在網(wǎng)格環(huán)境中,構(gòu)建了基于GMA的監(jiān)控系統(tǒng)模式,,并給出了該系統(tǒng)的具體實現(xiàn)方法,。通過理論分析和具體應用證實了該系統(tǒng)的有效性。
??? 關(guān)鍵詞:網(wǎng)格,;JNI,;Web Service;GMA,;監(jiān)控系統(tǒng)


?

??? 網(wǎng)格是以資源共享為目的,,支持對可計算資源的遠程和并發(fā)訪問,用高速互聯(lián)網(wǎng)絡連接地理上分布的可計算資源所組成的一個具有單一系統(tǒng)映像的高性能計算和信息服務環(huán)境[1],。
??? 在網(wǎng)格環(huán)境下,,存在著各種各樣異構(gòu)的計算資源,,這些計算資源無論在硬件還是在軟件上都存在很大差異。而且,,這些計算資源可能分布在世界各地,,通過互聯(lián)網(wǎng)結(jié)合在一起。由于這些特點,,運行過程中一些節(jié)點可能會發(fā)生故障,,導致網(wǎng)絡斷開或者出現(xiàn)性能問題。而且,,一些節(jié)點可能隨時會動態(tài)地加入或者離開網(wǎng)格環(huán)境,。雖然各種網(wǎng)格中間件都有一定的容錯性,但在某些情況下,,人工干預也是不可避免的,。由于網(wǎng)格規(guī)模巨大,在系統(tǒng)運行時會產(chǎn)生大量的性能數(shù)據(jù),,手工對網(wǎng)格系統(tǒng)進行狀態(tài)信息的收集,、監(jiān)控和分析而不借助一定的工具是很困難的,這就使得監(jiān)控系統(tǒng)在網(wǎng)格中的作用顯得尤為突出,。
??? 由于資源具有動態(tài)性,、流動性的特征,網(wǎng)格系統(tǒng)的運行性能,、穩(wěn)定性,、可靠性等重要指標,很大程度上依賴于網(wǎng)格系統(tǒng)的實時狀態(tài),。這就要求在網(wǎng)格中提供一種資源監(jiān)測機制負責對各種資源進行靜,、動態(tài)監(jiān)測,收集各種資源及節(jié)點的狀態(tài)變化信息,,使用戶和應用程序能夠及時掌握資源分配與調(diào)度、網(wǎng)絡帶寬,、處理器負載,、系統(tǒng)吞吐量等信息,以便及時解決網(wǎng)格系統(tǒng)中出現(xiàn)的各種障礙,,提高整個網(wǎng)格的性能,。 ?
1 JNI本地方法
??? Java本地接口方法JNI(Java Native Interface)是JDK的一部分,為Java提供一個本地代碼的接口,,是Java世界和其他語言間的橋梁,。JNI允許運行在Java虛擬機JVM(Java Virtual Machine )上的代碼調(diào)用本地程序和類庫,或者被它們調(diào)用,,這些程序和類庫可以是其他語言編寫的,,比如C,、C++或者匯編語言等。
1.1 JNI技術(shù)實現(xiàn)步驟
??? JNI在不同平臺上的實現(xiàn)步驟相同,。除了生成動態(tài)鏈接庫的方法不同外,,其他實現(xiàn)方法相同。圖1以Java編程中通過JNI方法調(diào)用不同平臺下的C/C++程序為例,,說明其具體步驟,。

?


1.2 JNI 提取資源節(jié)點系統(tǒng)信息
??? (1)編寫java源程序(MonitorInformation.java);
??? public class MonitorInformation {
??? public native double[] Disk( );//硬盤的信息
??? public native int[] Cpu();//cpu的使用率
??? public native double[] Memory();//內(nèi)存,、虛擬內(nèi)存的大小及使用率
??? public native long pin();//主頻
??? static{
??????? ?try{//此處即為本地方法所在鏈接庫名
??? System.loadLibrary('monitorinformation');
????????????? ??}catch(UnsatisfiedLinkError e){
?????????????????? ????????????? …………??}
?????????????? ?}
???????? }
??? (2)編譯生成類文件(MonitorInformation.class),;
??? 在 Eclipse+Myeclipse 開發(fā)環(huán)境下,這一步可以省略,,因為 Myeclipse 會自動編譯java源程序為.class文件,,若不是,則可使用javac MonitorInform-ation.java進行編譯,,生成MonitorInformation.class文件,。
??? (3)用javah生成頭文件(sys_MonitorInformation.h);
??? 用javah sys.MonitorInformation 為native方法生成sys_MonitorInformation.h頭文件,。
??? (4)編寫native方法(monitorinformation.cpp),;
??? JNI函數(shù)名稱分為3部分:①Java關(guān)鍵字,供Java虛擬機識別,;②調(diào)用者類名稱,;③對應的方法名稱,各段名稱之間用下劃線分割,。JNI函數(shù)的參數(shù)也由3部分組成:第1個是JNIEnv *,,它是一個指向JNI運行環(huán)境的指針;第2個參數(shù)隨本地方法是否靜態(tài)而不同,,非靜態(tài)本地方法的第2個參數(shù)是對對象的引用,,而靜態(tài)本地方法的第2個參數(shù)是對其Java類的引用;其余的參數(shù)通常對應Java方法的參數(shù),,參數(shù)類型需要根據(jù)一定規(guī)則進行映射,。注意:JNI函數(shù)返回值類型與Java函數(shù)返回值類型的相互轉(zhuǎn)化。
??? JNIEXPORT jdoubleArray JNICALL Java_sys_MonitorInformation_Disk(JNIEnv *,,
??? jobject){? //提取資源節(jié)點硬盤數(shù)據(jù)?? }
??? JNIEXPORT jlong JNICALL Java_sys_MonitorInformation_pin(JNIEnv *,, jobject){? //提取資源節(jié)點CPU主頻}
??? JNIEXPORT jintArray JNICALL Java_sys_MonitorInformation_Cpu (JNIEnv *, jobject){? //提取資源節(jié)點使用CPU的動態(tài)數(shù)據(jù)}
??? JNIEXPORT jdoubleArray JNICALL Java_sys_MonitorInformation_Memory (JNIEnv *,, jobject){ //提取資源節(jié)點內(nèi)存數(shù)據(jù)(包括虛擬內(nèi)存)}
??? 編譯native方法并生成動態(tài)鏈接庫(monitorinformation.dll),;
??? 最后,將動態(tài)鏈接庫放在Windows->System32文件夾下,,調(diào)用并運行java程序,。
2 Web Service
??? Web Service是建立在開放的Internet基礎上的新的分布式計算模型[3],。Web Service組件是一套開放的技術(shù)規(guī)范,其組件的基本組成部分為HTTP,、XML&XSD,、WSDL、UDDI和SOAP,。其系統(tǒng)構(gòu)架基于TCP/IP,、HTTP、XML等協(xié)議和規(guī)范,,可以實現(xiàn)事務之間的通信,、鏈接文檔的瀏覽、事務的自動調(diào)用,、服務的動態(tài)發(fā)現(xiàn)和發(fā)布等,。其體系結(jié)構(gòu)由Service provider、Service requester和Service broker 3個角色及Publish,、Bind和Find 3個動作構(gòu)建而成,,如圖2所示。

?


??? 服務提供者首先使用WSDL協(xié)議編制服務描述文件,,并將其發(fā)布到UDDI注冊中心,,UDDI利用SOAP消息機制(標準的XML/HTTP)來發(fā)布、編輯,、瀏覽以及查找注冊信息,。服務消費者在UDDI注冊中心發(fā)現(xiàn)感興趣的服務描述后,需要啟動消息通信,,消息和通信進程可以綁定到基于HTTP上的SOAP上,,服務提供者根據(jù)SOAP的綁定參數(shù),為服務請求者實施相應的服務,。同時,,在發(fā)布、發(fā)現(xiàn),、綁定服務的過程中,,服務請求者和服務提供者對SOAP規(guī)范全力支持,從而實現(xiàn)了良好的跨平臺,、無縫互操作性[4]
3 基于GMA的網(wǎng)格監(jiān)控系統(tǒng)
3.1 基于GMA的網(wǎng)格監(jiān)控模式

??? 為了有效減少網(wǎng)格中的數(shù)據(jù)傳輸,,本監(jiān)控系統(tǒng)采用基于生產(chǎn)者/消費者/注冊模式的GMA監(jiān)控體系結(jié)構(gòu)[4],,使用JNI、Web Service,、目錄服務等技術(shù),,構(gòu)建面向服務的基于GMA的監(jiān)控系統(tǒng),。作為一種類型的消費者,它實現(xiàn)了GMA定義的消費者接口,,并以Web頁面的方式向用戶顯示實時動態(tài)的性能信息,。監(jiān)控系統(tǒng)采用Servlet從生產(chǎn)者訂閱數(shù)據(jù)、利用實時的性能數(shù)據(jù)動態(tài)生成圖片,,然后利用JSP頁面與用戶進行交互,,圖3顯示了網(wǎng)格監(jiān)控系統(tǒng)模式。

?


??? 網(wǎng)格監(jiān)控流程:采用JNI技術(shù)對網(wǎng)格中每個活動資源節(jié)點進行動態(tài)實時監(jiān)測,,獲取監(jiān)控參數(shù),,通過Web服務技術(shù)進行遠程數(shù)據(jù)傳輸,然后以applet形式顯示到Web瀏覽器中,。這樣,,用戶首先以Web頁面的方式登錄管理節(jié)點,登錄后可以查看該管理節(jié)點轄域內(nèi)所有的資源節(jié)點,,然后點擊相應的資源節(jié)點即可查看該資源節(jié)點的具體配置信息,。
??? 由于網(wǎng)格監(jiān)控的特點,監(jiān)控的數(shù)據(jù)必須及時地傳送到需要的地點,,這就要求系統(tǒng)具有較小的延時以及較大的吞吐量,。另外,監(jiān)控系統(tǒng)要盡量減小給網(wǎng)格資源本身帶來的負載,。因此,,GGF[5]性能工作組認為,將數(shù)據(jù)收集和數(shù)據(jù)傳送分離有利于實現(xiàn)以上2點,。GMA體系結(jié)構(gòu)設計了一種獨立的生產(chǎn)者/消費者模型,,能夠根據(jù)協(xié)商做到“需求匹配”,并且可以根據(jù)系統(tǒng)負載以一種更精確并且更分布的方式來控制數(shù)據(jù)流量,,從而達到網(wǎng)格監(jiān)控系統(tǒng)所要求的監(jiān)控數(shù)據(jù)傳輸?shù)牡脱舆t,、高傳輸率、低負載和安全性,,使系統(tǒng)非常易于擴展,。
3.2 實現(xiàn)
??? 該資源監(jiān)控系統(tǒng)采用了面向服務的GMA體系結(jié)構(gòu),在網(wǎng)格中部署分布式的資源監(jiān)控服務,。在實現(xiàn)過程中運用了Java技術(shù)調(diào)用VC++動態(tài)鏈接庫的JNI技術(shù)以及在Java Applet小程序中封裝Web服務技術(shù),,通過接口統(tǒng)一發(fā)布Web服務,以便及時獲取所需要的信息,。
??? (1)創(chuàng)建Web服務:monitorinformation
??? 部分實現(xiàn)代碼如下:
??? public interface Imonitorinformation {
??? public double[] dispdisk(),,int[] dispcpu(),double[] dispmemory(),,long disppin();
??? }
??? monitorinformationImpl.java部分代碼如下:
??? public class monitorinformationImpl implements Imonitorinformation {
??? public double[] dispdisk(){
??? MonitorInformation m=new MonitorInformation();
?????????double[] disk=m.Disk( );
????????????? ??return disk;
????? ?}
??? public int[]dispcpu(){? //原理同上,, …… }
??? public double[] dispmemory(){ //原理同上,, …… }
??? public long disppin(){? //原理同上,……? }
????? ?}
??? MApplet.java部分代碼如下:
??? public class MApplet extends JApplet implements Runnable {
??? private int[] cpu,,double[] memory,,double[] disk;
??? private long pin;
???????private Service srvcModel;
????? ?private XFireProxyFactory factory;
????? ?private String serviceURL;
????? ?private Imonitorinformation srvc;
????? ?public MApplet() throws Exception {
??? srvcModel = new ObjectServiceFactory().create(Imonitorinformation.cl-ass);
??? // 創(chuàng)建服務對象
??? factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
??? // 使用XFire的服務工廠,生成創(chuàng)建實例
??? serviceURL=“http://”+ip+”:8080/project/services/mo-nitorinformation';
??? // 指定服務的地址
??? try { //初始化請求一次
??????? ??? srvc = (Imonitorinformation)factory.create( srvcModel,, serviceURL);?
??????????? cpu = srvc.dispcpu();?
??????????? memory = srvc.dispmemory();
?????????? ?disk = srvc.dispdisk();
?????????? ?pin=srvc.disppin();
?? ???? }?catch (MalformedURLException e){ ???e.printStackTrace(); }?
??? ……?? }
??? (2)如果沒有經(jīng)過數(shù)字簽名,,訪問客戶端程序下載后會受到安全限制。因此,,將Web服務工程打包以后,,對Applet小程序進行數(shù)字簽名,簽名工程如下:
??? 第1步:創(chuàng)建證書keytool -genkey -alias -keystore ,。
??? 這里keyname是要給出的密鑰別名,,例如'mykeyname' ;url是存放宇航局鑰的文件位置,,通常就是cacerts文件,,在{java.home}/lib/security/cacerts,這里的java.home是指jre的路徑,,在jdk里,,本系統(tǒng)的jre路徑是:C:jdk1.5.0_04jrelibsecuritycacerts。
??? 第2步:簽名,。
??? jarsigner -keystore
??? 本系統(tǒng)的簽名路徑是:jarsigner -keystore
??? C:jdk1.5.0_04jrelibsecuritycacerts
??? G:workspaceGraphGraph_fat.jar zhu2008,。
??? 注意:簽名時的要與創(chuàng)建證書時的相同,若不同,,簽名不通過,。
??? 啟動Tomcat服務器后,在初次在瀏覽器運行時會出現(xiàn)如下提示對話框,,必須選中“始終信任此發(fā)行者的內(nèi)容(A)”,,以便保證系統(tǒng)的安全性,再點擊“運行”即可,。如圖4所示,。

?


3.3 監(jiān)控服務
??? 網(wǎng)格監(jiān)控系統(tǒng)都有自己的監(jiān)控服務、注冊中心[6],、監(jiān)控信息提供者和監(jiān)控服務代理等,,可以實時監(jiān)控當前資源的基本信息和實時狀態(tài)信息。監(jiān)控服務直接面向監(jiān)控事件消費者與上層應用,,為消費者訪問提供統(tǒng)一的信息服務訪問接口,,它對應面向服務的GMA體系結(jié)構(gòu)的生產(chǎn)者/消費者復合組件[7],最初運行時需要向目錄服務中心進行注冊。監(jiān)控服務主要負責維護資源監(jiān)控系統(tǒng)內(nèi)相應監(jiān)控服務代理的注冊信息以及與它相鄰監(jiān)控服務的相關(guān)信息,,實時獲取各個資源節(jié)點的數(shù)據(jù),定期對所監(jiān)控的所有資源的靜動態(tài)監(jiān)測信息生成詳細監(jiān)測報告,,為用戶提供監(jiān)控視圖,。例如,圖5中顯示了處理器,、內(nèi)存,、硬盤部分監(jiān)控信息。

?


??? 因為網(wǎng)格中資源狀態(tài)信息和其他監(jiān)控組件的變化都依賴于CPU的改變,。如果CPU利用率幾乎沒有改變,,那其他的資源狀態(tài)也不會有大的改變。反之,,意味著資源的狀態(tài)將會有一個較大的改變,,應該立即監(jiān)控。通常情況下,,CPU占用比例大于 70%的時間超過 1/3時,,應該加強對 CPU監(jiān)控, 找出 CPU消耗的主要進程,,分析進程高 CPU 占用率的原因,。CPU 占用比例大于80%的時間超過 1/2 時,應同時加強內(nèi)存監(jiān)控,, 考慮升級設備,。從而,不必要的系統(tǒng)開銷明顯降低,,事件的準確率也得到滿足,。
??? 本文基于GMA體系結(jié)構(gòu)以及Web Services、JNI,、applet,、目錄服務等技術(shù),構(gòu)建的網(wǎng)格監(jiān)控系統(tǒng),,可以靈活地將靜態(tài)和動態(tài)信息結(jié)合在一起,,通過監(jiān)控可以發(fā)現(xiàn)故障的資源節(jié)點,分析系統(tǒng)瓶頸,,幫助用戶在最短的時間內(nèi)恢復和調(diào)整系統(tǒng),;通過監(jiān)控可以了解計算資源或者存儲資源等的負載情況,為調(diào)度程序提供信息,,以實現(xiàn)節(jié)點間的負載平衡,。
參考文獻
[1]?黃達明,李國東,張德富.網(wǎng)格監(jiān)控系統(tǒng)研究[J].計算機科學,,2003,,30(9):144-146.
[2]?Rob G ,Alan E. JNI,,Java native interface. Prentice Hall,,1998.
[3]?范鳳岐,熊聰聰.基于網(wǎng)格的Web Service實現(xiàn)[J].計算機與數(shù)字工程,,2007,,35(2):110-112.
[4]?桂小林.網(wǎng)格技術(shù)導論[M].北京:北京郵電大學出版社,2006.
[5]?Ian F,, Carl K. The grid2 blueprint for a new computing infrastructure,,2003.
[6]?廖劍偉,蔡洪斌,,蔣攀登,,等.基于Java的網(wǎng)格監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].計算機應用研究,2005,,25(12):234-236.
[7]?張宏海.網(wǎng)格監(jiān)控系統(tǒng)[J].超級計算通訊,,2006,4(4):43-45.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。