一种跨操作系统平台的机群系统监控和管理方法

文档序号:6533917阅读:163来源:国知局
专利名称:一种跨操作系统平台的机群系统监控和管理方法
技术领域
本发明涉及一种计算机应用技术和机群系统管理中的安全技术,特别涉及一种跨操作系统平台的机群系统管理中JAVA程序调用C/C++程序的监控和管理功能的方法。
背景技术
机群就是通过高性能网络或局部网将一组计算机系统(结点)互联,形成的具有单一系统映像的高性能、高可用、高可扩展性、高性能价格比的计算机机群系统。由于其相对于传统的大型机的高可用性和低价格的优势,用机群构造超级计算机或超级服务器成为一种流行的趋势。但是机群系统结构松散、结点独立性强、网络连接复杂,并且,随着节点数的增加,对机群的管理和维护变的越来越困难,增加了系统的总拥有成本。
为了管理和维护机群系统,目前流行的方式是在各结点机的操作系统之上再建一层操作系统软件来管理整个机群,称之为机群操作系统或者叫做机群管理系统。机群管理系统是机群系统软件的一部分,几乎处于系统软件的最顶层,它对整个机群的软、硬件起到管理的作用,为机群的系统管理员和最终用户提供服务。机群系统的一个基本特点是“整个系统呈现给用户的是单一系统的映像”,机群管理为这一目标的实现应提供在单一控制台上包括对机群的规划、安装、配置、监控、日常维护、开机关机等系统管理全过程的控制支持。机群管理系统应提供一套多功能、易使用、可扩展的实用化管理工具,帮助管理员监控整个机群的工作状态,保证机群系统高效、稳定的运行。
目前随着机群系统的广泛应用,特别是在商业应用中应用,机群中结点的操作类型出现异构性的趋势,在一个机群的内部各个结点上的操作系统出现了UNIX类、Linux类或者是Windows类操作系统并存的现象。这就要求机群的系统管理软件具有跨平台管理的功能,可以同时管理不同操作系统类型的结点。由于JAVA语言以平台独立、提供面向对象的远程通信协议(RMI)、易于与WebServer集成等优点,被选为机群系统管理首选的开发语言。但是与系统相关的监控和管理功能一般(如Linux下通过/proc文件系统的读写监控和管理系统)或者必须(如Windows下通过WMI标准管理系统)由C/C++语言实现。普通的解决方案有两种,一种是把C/C++程序改写成向控制台输出信息,JAVA程序调用该程序,然后获得其输出信息,再把信息解析成JAVA中需要的数据;另外一种是,利用JAVA提供的JNI技术,把C/C++改写成可以被JAVA调用的函数(类),通过JNI规则调用。
无论是采用以上的哪种方法,针对特定的监控或者管理方法,都需要编写特定的C/C++和JAVA之间的转换程序,该程序的设计和实现过程是一个复杂的、重复的、不宜扩展的、容易出错的过程。可见,需要一种简洁的实现跨平台的系统管理中JAVA程序调用C/C++程序的监控和管理功能的方法。

发明内容
有鉴于此,提供了一种跨平台(UNIX类、Linux类、Windows类操作系统)的机群系统管理中JAVA程序调用C/C++程序实现的监控和管理功能统一方法,为跨平台、实现多种监控和管理功能时,JAVA程序和C/C++程序交换数据提出了简洁的、易扩展的方法。
为达到上述目的,本发明提供了一种跨平台的机群系统管理中JAVA程序调用C/C++程序实现的监控和管理功能的方法。
本发明的方法是为C/C++的调用接口定义特定的输出数据约定,利用JNI方法获取或设置C/C++程序中的数据,通过操作系统属性自动确定被调用C/C++在不同操作系统上的JNI实现的动态链接库,并利用JAVA语言的反射(reflection)机制,把从C/C++程序中获得的数据自动转换成JAVA对象,只写一次C/C++数据和JAVA数据的程序,就可以实现利用JAVA程序调用多种功能的C/C++程序的监控和管理,实现在多种操作系统结点上的监控和管理。
该方法是通过以下步骤实现的a)预先定义JAVA语言中统一的监控方法和管理方法的名称,通过传入具体的监控和管理动态库、方法名和要返回的实例的类名来调用C/C++程序,实现跨操作系统平台的机群系统监控和管理功能;b)通过定义C/C++语言实现JNI中动态库的名称在不同操作系统上的统一命名规则,为不同的动态库建立命名规则,使得JAVA程序能够根据操作系统的类型,自动选择调用动态库中的方法;c)根据结点的操作系统类型,选择相应的JNI实现的本地化动态链接库,并根据不同的操作系统信息在JAVA程序中加载为不同操作系统实现的JNI动态库,实现机群系统监控和管理功能,JNI库的加载与操作系统无关。
d)定义C/C++语言中的监控和管理功能实现动态库中方法的命名和设定函数原型规则,以此实现在不同操作系统上的C/C++函数具有相同的函数原型,进而依据相同函数原型和函数名称动态加载动态链接库;e)定义C/C++监控函数返回数据的规范性,使返回数据中所保存的每个被监控实例不但要属性的值,还要有相应属性的名称,该种规范性的关键是在获得的数据中指明相应属性的名称,该名称在后续步骤中被JAVA的反射机制用于JAVA对象相应的属性赋值。


附图1为JAVA程序和C/C++程序的数据交换示意图;附图2为C/C++语言输出实例属性的名称和值自动反射形成JAVA对象的数据交换示意图。
1)预先定义JAVA语言中统一的监控方法名称,如Object[]getInfo(StringdllLibName,String methodName,String className),统一的管理方法名称,如Boolean setInfo(String dllLibName,String methodName,StringclassName,StringArray parameterArray);其中dllLibName是要调用的方法所在的动态链接库的名称,methodName是调用方法的名称,className是返回信息Object[]数组中对象实例的类型,parameterArray是执行方法时需要的参数。关键在于通过指定不同的动态库、不同的方法名和不同的返回数组类型,可以调用不同的C/C++实现的功能。
2)定义C/C++语言中JNI实现动态库的名称规定,定义为Libxxx.y,形式,其中xxx为所在操作系统的类型,如xxx可以是Linux、AIX、Windows2000等,y是动态库后缀的名称,可以是dll或者so,关键在于为不同的动态库建立命名规则,使得JAVA程序可以根据操作系统的类型,自动决定调用哪个动态库中的方法。
3)定义C/C++语言中监控和管理功能实现动态库中方法的名称和函数原型规则,监控功能的方法的函数原型统一定义为getInfo(char*** pBuf.int&count,int &propertyNumber),管理功能的函数原型定义为setInfo(char**pBuf),其中pBuf是调用getInfo获得的监控数据,count表示有多少个监控实例,propertyNumber表示每个监控实例用多少个属性信息,例如,对于逻辑磁盘的监控信息如下public class LogicalDisk{
//描述String Description;//文件系统String FileSystem;//可用空间String FreeSpace;//逻辑磁盘利用率String lgicalUsg;//名称String Name;//大小String Size;//磁盘卷标public String VolumeName;}通过名称为GetLogicalDiskInfo,函数原型是getInfo(char***pBuf,int&count,int &propertyNumber)的函数,如果系统上有C、D、E三个逻辑磁盘,则count是3,propertyNumber为6,pBuf中填充是三个逻辑盘的信息,其规定由4)给出。
此步的关键在于统一定义在不同操作系统上实现的C/C++函数具有相同的函数原型,以便根据函数原型和函数名称动态加载动态链接库。
4)定义C/C++监控函数传出数据pBuf的规范,pBuf中保存的每个实例不但要保存属性的值,还要保存相应的属性的名称,例如,要保存第一个LogicalDisk实例的数据,它的数据是aLogicalDisk.Description=”something”,aLogicalDisk.FileSystem=”NTFS”,aLogicalDisk.lgicalUsg=”20%”,aLogicalDisk.Name=”C”,aLogicalDisk.Size=”80GB”,aLogicalDisk.VolumeName=”demo”.
则pBuf
中保存的数据是pBuf
=”Description”;
pBuf
[1]=”something”;pBuf
[2]=”FileSystem”;pBuf
[3]=”NTFS”;pBuf
[4]=”lgicalUsg”;pBuf
[5]=”20%”;pBuf
[6]=”Name”;pBuf
[7]=”C”;pBuf
[8]=”Size”;pBuf
[9]=”80GB”;pBuf
[10]=”VolumeName”;pBuf
[11]=”demo”;….其他实例该规范的关键是在获得的数据中指明相应的属性的名称,该名称用来在后续步骤中利用JAVA的反射机制为JAVA对象相应的属性赋值。
5)根据结点的操作系统类型,选择相应的JNI实现的本地化动态链接库,因为为不同的操作系统的实现的JNI的动态库的名称和类型都不尽相同,根据不同的操作系统信息,在JAVA程序中利用System.loadLibrary加载不同的为不同的操作系统实现的JNI动态库。此步的关键是,JAVA程序根据所在操作系统的类型,自动的加载不同操作系统上的JNI实现。
6)根据动态库的名称、方法的名称调用不同的管理和监控方法,如Object[] objList=getInfo(″MonitorInfo.dll″,″GetLogicalDiskInfo″,″LogicalDi sk″);for(int i=0;i<objList.length;i++){//获得不同的LogicalDisk实例LogicalDisk lgDisk=(LogicalDisk)objList[i];}通过MonitorInfo.dll动态库,GetLogicalDiskInfo方法,获得LogicalDisk类型的一组实例。该步骤的关键是,利用统一的接口,通过传入不同的动态库名称,方法名称、类名称就可以监控和管理相应的功能,不必为每种监控和管理功能重复设计和实现JAVA和C/C++数据之间的转换。
7)在JAVA程序Object[]getInfo(String dllLibName,String methodName,String className)内部,根据动态库、方法名调用相应的C/C++方法,获得char*** pBuf输出,利用JAVA reflection机制,实例化以className类型的对象,根据pBuf中每个实例的属性名为每个实例化的对象赋值,用到的方法是Field.set()方法。所有的实例以返回值的形式返回,如,用户通过JAVA调用getInfo(″MonitorInfo.dll″,″GetLogicalDiskInfo″,″LogicalDisk″)就可以获得监控信息,多个LogicalDisk实例。该步骤的关键是,利用C/C++语言输出的实例的属性的名称和值自动反射形成JAVA对象。
由本发明的技术方案可见,本发明的这种实现跨平台的机群管理中JAVA程序调用C/C++程序管理监控功能的方法,为机群系统在数据层管理和监控多种结点信息提供了一种简单、高效的开发方法,只需要设计和实现一次JAVA语言和C/C++语言数据的交换程序,就可以实现多种监控和管理功能。该方法把系统具体的管理和监控功能从JAVA和C/C++数据转换的通用功能中分离出来,为跨平台的、多种管理和监控功能的扩展提供了方便易用的方案。
权利要求
1.一种跨操作系统平台的机群系统监控和管理方法,其特征在于,为C/C++的调用接口定义特定的输出数据约定,利用JNI方法获取或设置C/C++程序中的数据,通过操作系统属性自动确定被调用C/C++在不同操作系统上的JNI实现的动态链接库,并利用JAVA语言的反射(reflection)机制,把从C/C++程序中获得的数据自动转换成JAVA对象,只写一次C/C++数据和JAVA数据的程序,就能实现在多种操作系统结点上利用JAVA程序调用多种功能C/C++程序的监控和管理,具体步骤如下a)定义JAVA语言中统一的监控方法和管理方法的名称,通过传入具体的监控和管理动态库、方法名和要返回的实例的类名来调用C/C++程序,实现跨操作系统平台的机群系统监控和管理功能;b)定义C/C++语言实现JNI中动态库的名称在不同操作系统上的统一命名规则,为不同的动态库建立命名规则,使得JAVA程序能够根据操作系统的类型,自动选择调用动态库中的方法;c)根据结点的操作系统类型,选择相应的JNI实现的本地化动态链接库,并根据不同的操作系统信息在JAVA程序中加载为不同操作系统实现的JNI动态库,实现机群系统监控和管理功能,JNI库的加载与操作系统无关;d)定义C/C++语言中的监控和管理功能实现动态库中方法的命名和设定函数原型规则,以此实现在不同操作系统上的C/C++函数具有相同的函数原型,进而依据相同函数原型和函数名称动态加载动态链接库;e)定义C/C++监控函数返回数据的规范性,使返回数据中所保存的每个被监控实例不但要属性的值,还要有相应属性的名称,该种规范性的关键是在获得的数据中指明相应属性的名称,该名称在后续步骤中被JAVA的反射机制用于JAVA对象相应的属性赋值。
全文摘要
本发明提供了一种跨操作系统平台(UNIX类、Linux类、Windows类操作系统)的机群系统管理中,JAVA程序调用C/C++程序实现监控和管理功能的方法,该方法为C/C++的调用接口定义特定的输出数据约定,利用JNI-方法获取/设置C/C++程序中的数据,通过操作系统属性自动确定被调用C/C++在不同操作系统上的JNI实现的动态链接库,利用JAVA语言的反射(reflection)机制,把从C/C++程序中获得的数据自动的转换成JAVA对象。该方法利用简单工厂模式思想和java反射思想设计,避免针对不同的管理和监控功能的重复设计,通过只写一次C/C++数据和JAVA数据的程序即可完成从C/C++数据和JAVA数据的转换,实现利用JAVA程序调用多种功能的C/C++程序进行跨平台的机群系统监控和管理。
文档编号G06F15/16GK1746844SQ20051004487
公开日2006年3月15日 申请日期2005年9月29日 优先权日2005年9月29日
发明者李景山, 王洪亮, 刘正伟, 董小社, 伍卫国 申请人:浪潮电子信息产业股份有限公司, 西安交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1