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

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

2009-06-23
作者:楊道杰

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


?

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

?


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

?


??? 服務(wù)提供者首先使用WSDL協(xié)議編制服務(wù)描述文件,并將其發(fā)布到UDDI注冊中心,UDDI利用SOAP消息機(jī)制(標(biāo)準(zhǔn)的XML/HTTP)來發(fā)布、編輯、瀏覽以及查找注冊信息。服務(wù)消費(fèi)者在UDDI注冊中心發(fā)現(xiàn)感興趣的服務(wù)描述后,需要啟動(dòng)消息通信,消息和通信進(jìn)程可以綁定到基于HTTP上的SOAP上,服務(wù)提供者根據(jù)SOAP的綁定參數(shù),為服務(wù)請求者實(shí)施相應(yīng)的服務(wù)。同時(shí),在發(fā)布、發(fā)現(xiàn)、綁定服務(wù)的過程中,服務(wù)請求者和服務(wù)提供者對SOAP規(guī)范全力支持,從而實(shí)現(xiàn)了良好的跨平臺(tái)、無縫互操作性[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)者/消費(fèi)者/注冊模式的GMA監(jiān)控體系結(jié)構(gòu)[4],使用JNI、Web Service、目錄服務(wù)等技術(shù),構(gòu)建面向服務(wù)的基于GMA的監(jiān)控系統(tǒng)。作為一種類型的消費(fèi)者,它實(shí)現(xiàn)了GMA定義的消費(fèi)者接口,并以Web頁面的方式向用戶顯示實(shí)時(shí)動(dòng)態(tài)的性能信息。監(jiān)控系統(tǒng)采用Servlet從生產(chǎn)者訂閱數(shù)據(jù)、利用實(shí)時(shí)的性能數(shù)據(jù)動(dòng)態(tài)生成圖片,然后利用JSP頁面與用戶進(jìn)行交互,圖3顯示了網(wǎng)格監(jiān)控系統(tǒng)模式。

?


??? 網(wǎng)格監(jiān)控流程:采用JNI技術(shù)對網(wǎng)格中每個(gè)活動(dòng)資源節(jié)點(diǎn)進(jìn)行動(dòng)態(tài)實(shí)時(shí)監(jiān)測,獲取監(jiān)控參數(shù),通過Web服務(wù)技術(shù)進(jìn)行遠(yuǎn)程數(shù)據(jù)傳輸,然后以applet形式顯示到Web瀏覽器中。這樣,用戶首先以Web頁面的方式登錄管理節(jié)點(diǎn),登錄后可以查看該管理節(jié)點(diǎn)轄域內(nèi)所有的資源節(jié)點(diǎn),然后點(diǎn)擊相應(yīng)的資源節(jié)點(diǎn)即可查看該資源節(jié)點(diǎn)的具體配置信息。
??? 由于網(wǎng)格監(jiān)控的特點(diǎn),監(jiān)控的數(shù)據(jù)必須及時(shí)地傳送到需要的地點(diǎn),這就要求系統(tǒng)具有較小的延時(shí)以及較大的吞吐量。另外,監(jiān)控系統(tǒng)要盡量減小給網(wǎng)格資源本身帶來的負(fù)載。因此,GGF[5]性能工作組認(rèn)為,將數(shù)據(jù)收集和數(shù)據(jù)傳送分離有利于實(shí)現(xiàn)以上2點(diǎn)。GMA體系結(jié)構(gòu)設(shè)計(jì)了一種獨(dú)立的生產(chǎn)者/消費(fèi)者模型,能夠根據(jù)協(xié)商做到“需求匹配”,并且可以根據(jù)系統(tǒng)負(fù)載以一種更精確并且更分布的方式來控制數(shù)據(jù)流量,從而達(dá)到網(wǎng)格監(jiān)控系統(tǒng)所要求的監(jiān)控?cái)?shù)據(jù)傳輸?shù)牡脱舆t、高傳輸率、低負(fù)載和安全性,使系統(tǒng)非常易于擴(kuò)展。
3.2 實(shí)現(xiàn)
??? 該資源監(jiān)控系統(tǒng)采用了面向服務(wù)的GMA體系結(jié)構(gòu),在網(wǎng)格中部署分布式的資源監(jiān)控服務(wù)。在實(shí)現(xiàn)過程中運(yùn)用了Java技術(shù)調(diào)用VC++動(dòng)態(tài)鏈接庫的JNI技術(shù)以及在Java Applet小程序中封裝Web服務(wù)技術(shù),通過接口統(tǒng)一發(fā)布Web服務(wù),以便及時(shí)獲取所需要的信息。
??? (1)創(chuàng)建Web服務(wù):monitorinformation
??? 部分實(shí)現(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)建服務(wù)對象
??? factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
??? // 使用XFire的服務(wù)工廠,生成創(chuàng)建實(shí)例
??? serviceURL=“http://”+ip+”:8080/project/services/mo-nitorinformation';
??? // 指定服務(wù)的地址
??? 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ù)字簽名,訪問客戶端程序下載后會(huì)受到安全限制。因此,將Web服務(wù)工程打包以后,對Applet小程序進(jìn)行數(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。
??? 注意:簽名時(shí)的要與創(chuàng)建證書時(shí)的相同,若不同,簽名不通過。
??? 啟動(dòng)Tomcat服務(wù)器后,在初次在瀏覽器運(yùn)行時(shí)會(huì)出現(xiàn)如下提示對話框,必須選中“始終信任此發(fā)行者的內(nèi)容(A)”,以便保證系統(tǒng)的安全性,再點(diǎn)擊“運(yùn)行”即可。如圖4所示。

?


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

?


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

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