CNGrid网格软件应用层用户手册 icem网格划分 o grid
CNGrid网格软件应用层用户手册
文档状态:本文是CNGrid网格软件的第四个正式稿文档。它的前一个主要文档是《CNGrid网格软件资源层用户手册》。后一个主要文档是《CNGrid网格软件测试手册》
摘要:本文结合CNGrid网格软件的逻辑结构,重点说明了网格软件与上层应用的接口方式和方法,给出了网格软件向上提供的接口定义,并说明了基于网格软件所提供接口进行开发的规范。
目录
0. 术语... PAGEREF _Toc40754379 h 2
1. CNGrid网格软件的结构和功能... PAGEREF _Toc40754380 h 3
2. 安全服务的应用层接口... PAGEREF _Toc40754381 h 3
2.1 安全服务... PAGEREF _Toc40754382 h 3
2.2 接口及编程规范... PAGEREF _Toc40754383 h 4
2.2.1 客户端认证接口... PAGEREF _Toc40754384 h 4
2.2.2 服务器端认证接口... PAGEREF _Toc40754385 h 5
2.2.3 服务器端授权接口:... PAGEREF _Toc40754386 h 6
3. 作业服务的应用层接口... PAGEREF _Toc40754387 h 7
3.1 作业服务... PAGEREF _Toc40754388 h 7
3.2 接口及编程规范... PAGEREF _Toc40754389 h 8
3.2.1 网格服务访问接口... PAGEREF _Toc40754390 h 8
3.2.2 批处理计算作业服务接口... PAGEREF _Toc40754391 h 11
4 数据服务的应用层接口... PAGEREF _Toc40754392 h 13
4.1 数据服务... PAGEREF _Toc40754393 h 13
4.2 接口及编程规范... PAGEREF _Toc40754394 h 14
4.2.1 数据访问的接口... PAGEREF _Toc40754395 h 14
4.2.2 数据传输的接口设计... PAGEREF _Toc40754396 h 14
5 用户服务的应用层接口... PAGEREF _Toc40754397 h 14
5.1 用户服务... PAGEREF _Toc40754398 h 14
5.2 接口及编程规范... PAGEREF _Toc40754399 h 15
6 网格管理的应用层接口... PAGEREF _Toc40754400 h 17
6.1 网格管理... PAGEREF _Toc40754401 h 17
6.2 接口及其编程规范... PAGEREF _Toc40754402 h 17
7 网格监控的应用层接口... PAGEREF _Toc40754403 h 20
7.1 网格监控系统... PAGEREF _Toc40754404 h 20
7.2 接口及其编程规范(MSS)... PAGEREF _Toc40754405 h 20
8. 用户环境... PAGEREF _Toc40754406 h 28
9. 参考文献... PAGEREF _Toc40754407 h 28
0. 术语
网格系统软件
网格系统软件是网格中间件软件,完成对分布、异构资源的集成,向上层网格应用提供编程接口和运行环境。简称网格软件,GOS。
网格应用
基于网格应用编程接口开发的应用系统。网格应用的运行将依赖于网格系统软件的运行时支持。
网格应用编程接口
面向网格应用开发者的,网格系统软件提供的一组面向上层应用的编程接口(API)。简称GOS API。
网格结点
网格结点是指一台逻辑上独立的主机系统。
资源
资源是指网格结点上已有的各种硬件、软件,这些软硬件可以通过Grid Service的封装后以标准的服务方式提供给外部的资源请求者使用。为了与虚拟资源区分,也称为物理资源。
资源接入
指资源从国家网格服务注册中心获得合法编码的过程。
资源部署
指本地资源或远程(其他结点)资源与本地网格系统软件(逻辑)连接的过程。
虚拟资源
指具有相同功能,相同访问接口的一类资源。在国家网格系统中,资源经过资源接入,资源部署后,成为虚拟资源。
网格服务器
网格服务器是与网格结点相连的前端服务器。用于对网格结点上的资源进行封装,实现资源的虚拟化,同时是网格客户端的接入点。
专用客户端
专用客户端是特定网格应用自己定制的客户端界面。
网格实用程序(Grid Utilities)
运行在客户端的,利用网格应用编程接口开发的,能够完成特定功能的网格应用。
网格服务脚本语言(GSSL)
面向简单网格应用开发者的,利用网格实用程序所提供的功能,访问并操作国家网格系统虚拟或物理资源的,具有简单工作流处理能力的客户端编程语言。
网格服务标记语言(GSML)
面向最终用户的,访问并操作国家网格系统虚拟资源的标记语言。
1. CNGrid网格软件的结构和功能
网格系统软件的作用是把用户请求(网格计算,网格数据和网格应用等)与网格资源连接在一起,使用户不必了解网格资源的细节(位置,调用方式),由网格软件代替用户进行虚拟资源到物理资源的映射,从而做到对用户透明。
网格系统软件的层次结构与模块划分如图所示,安全服务和信息服务是整个网格软件纵横支撑体,是网格软件的基础,其它模块是建立在这两个基础模块之上的,称之为系统服务。在网格软件1.0β版中,重点实现安全服务,信息服务,作业服务;兼顾用户管理,数据服务,网格监控,网格管理和用户环境。
在网格软件中,对最终用户和开发用户开放的接口基于上图网格软件系统层的功能划分。针对不同的用户,这些接口分别以三种形式提供:GSML 语言,GSSL 环境,以及GOS API。
注:在1.0 β版中,对上层应用只提供GOS API 形式的接口。其它类型的接口将在后续版本中陆续提供。
2. 安全服务的应用层接口
2.1 安全服务
网格系统安全在实施上遵循GSI的标准[1]。GSI基于公钥加密体系,采用X.509认证、Secure Socket Layer(SSL)通信协议并支持基于W3C标准的SOAP消息安全性[2, 3],并对它们进行了一定的扩展,使得GSI可以支持双向认证,委托(delegation)和单点登录。为保证所有网格实体(用户和资源)证书的唯一性,中国国家网格(CNGrid)拥有唯一的CA 认证中心。
在网格环境中,主要的安全策略包括:(1)用户和资源之间的所有连接需要安全认证;(2)所有的安全认证是双方相互的;(3)一个用户在一个限定时间内可使用其代理与一个代表资源的代理进行交互认证(证书链机制);(4)物理资源的控制权限由其本地安全策略确定;(5)用户与资源之间的安全通信(加密机制)。
2.2 接口及编程规范
2.2.1 客户端认证接口
在客户端,可以通过如下几个GSI 属性(property)来控制认证过程:
GSIConstants.GSI_CREDENTIALS <org.ietf.jgss.GSSCredential 对象实例>
用于传送指定的证书。如果没有指定,缺省使用用户代理证书。GSIConstants.GSI_AUTHORIZATION < org.globus.gsi.gssapi.auth.Authorization 对象实例>
只用于GSI 认证。设置授权类型,如果没有指定,缺省执行主机授权。GSIConstants.GSI_MODE <mode>
只用于GSI 认证。用于设置GSI 认证模式,其中的<mode>可以是以下形式:
GSIConstants.GSI_MODE_NO_DELEG – 不执行委托(delegation)
GSIConstants.GSI_MODE_LIMITED_DELEG – 执行受限委托(缺省)
GSIConstants.GSI_MODE_FULL_DELEG – 执行完全委托
另外,(org.globus.ogsa.impl.security.authentication.Constants)Constants.MSG_SEC_TYPE 属性可以设置成Constants.SIGNATURE 或Constants.ENCRYPTION,以代表不同的SOAP 消息保护方式。
也可以通过声明PortType 实例为javax.xml.rpc.Stub类,然后再通过调用._setProperty() 方法来设置这些GSI 属性。如果直接使用Axis 调用对象,则通过调用.setProperty()可达到同样的目的。
下面是网格软件客户端安全接口的部分代码。
import javax.xml.rpc.Stub;
import org.globus.axis.gsi.GSIConstants;
import org.globus.gsi.gssapi.auth.NoAuthorization;
…
import org.ietf.jgss.GSSCredential;
import org.ietf.jgss.GSSException;
…
public class <any>Client{
…
<any>ServiceLocator <any>Locator = new <any>ServiceLocator();
<any>ServiceGridLocator <any>GridLocator = new <any>ServiceGridLocator();
<any>ServiceGridPortType <any>GridService =
<any>GridLocator.getGridServicePort(new HandleType(string handle));
<any>PortType <any> Service =
<any>Locator.getTesterService(<any>GridLocator.getEndpoint());
…
((Stub)<any>GridService)._setProperty( GSIConstants.GSI_AUTHORIZATION,
NoAuthorization.getInstance());
((Stub)<any>GridService)._setProperty( GSIConstants.GSI_MODE,
GSIConstants.GSI_MODE_FULL_DELEG);
((Stub) <any>GridService)._setProperty( Constants.MSG_SEC_TYPE,
Constants.SIGNATURE);
// Call methods of <any>GridService
…
}
2.2.2 服务器端认证接口
secure_<any>_port_type.gwsdl 文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="SecureCounter"
targetNamespace="http://ogsa.globus.org/samples/counter/secure"
xmlns:tns="http://ogsa.globus.org/samples/counter/secure"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:counter="http://ogsa.globus.org/samples/counter/notification"
xmlns:gsi="http://ogsa.globus.org/security/authentication"
xmlns:gwsdl="http://www.gridforum.org/namespaces/2003/03/gridWSDLExtensions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import location="../../ogsi/ogsi.gwsdl" namespace="http://www.gridforum.org/namespaces/2003/03/OGSI"/>
<import location="counter_port_type.gwsdl" namespace="http://ogsa.globus.org/samples/counter"/>
<import location="notification_counter_port_type.gwsdl" namespace="http://ogsa.globus.org/samples/counter/notification"/>
<import location="../../security/authentication/gss_secure_conversation_port_type.gwsdl" namespace="http://ogsa.globus.org/security/authentication"/>
<gwsdl:portType name="SecureCounterPortType" extends="counter:NotificationCounterPortType gsi:SecureContextEstablishmentPortType"/>
</definitions>
gss_secure_conversation_port_type.gwsdl 文件的部分内容如下:
…
<gwsdl:portType name="SecureContextEstablishmentPortType">
<operation name="initTokenExchange">
<input message="tns:InitTokenExchangeInputMessage"/>
<output message="tns:InitTokenExchangeOutputMessage"/>
<fault name="MechanismTypeNotSupportedFault" message="tns:MechanismTypeNotSupportedFault"/>
</operation>
<operation name="continueTokenExchange">
<input message="tns:ContinueTokenExchangeInputMessage"/>
<output message="tns:ContinueTokenExchangeOutputMessage"/>
<fault name="InvalidContextIdFault" message="tns:InvalidContextIdFault"/>
</operation>
</gwsdl:portType>
…
用户所开发的符合GSI 安全规范的服务(简称GSI 服务)应该在相应的gwsdl 文档中说明其安全接口(这里是Secure<any>PortType),并说明该PortType接口继承自SecureContextEstablishmentPortType接口,以便客户端能够自动生成相应的stub。如上述两个gwsdl 文档所示。此外,实现消息层安全和传输层安全所需的服务器端配置细节参见[4]。
下面是网格软件服务器端实现的部分代码。
…
import org.globus.axis.util.Util;
import org.ietf.jgss.GSSCredential;
…
serviceImpl( params ) throws RemoteException {
GSSCredential creds =
Util.getCredentials(MessageContext.getCurrentContext());
if (creds == null) {
throw new RemoteException("Credentials are required for this service");
}
// Code of Service Job
…
}
…
2.2.3 服务器端授权接口:
网格软件的对授权的实现是与本地资源的访问控制策略相结合的。即采用GT3 的网格用户与本地资源用户进行一对一或多对一映射的方式实现。这种映射关系存放在grid-mapfile文件中,其内容如下所示。各服务可使用相同或不同的grid-mapfile文件(可通过服务属性设置)。
对grid-mapfile文件的操作在org.globus.security.gridmap.GridMap (cog1.1a)[5]类中实现,包括装载grid-mapfile文件(load);由网格用户ID 获取对应的本地用户名(getUserID);由本地用户名获取对应的网格用户ID(getGlobusID);检查给定的网格用户ID 和本地用户名的对应是否正确(checkUser);以及对grid-mapfile文件进行必要维护的方法实现,如创建grid-mapfile文件,增加,修改和删除文件中的条目等。
grid-mapfile 文件的内容及格式如下所示。
…
"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak" dvorak
"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Jarek Gawor" gawor
…
3. 作业服务的应用层接口
3.1 作业服务
作业服务是基于网格软件的批式,交互式传统计算作业以及通用服务调用作业的处理系统,实现网格物理资源到网格虚拟资源的映射、绑定和调度,提供网格作业的生命周期管理以及作业调度。作业服务以OGSA Grid Service 的方式提供对外接口。网格软件作业服务的具体功能包括:
§ 网格作业的资源请求处理;
§ 网格作业的提交,状态查询,挂起和恢复,撤销;
§ 网格资源调度;
§ 网格作业的全局调度;
§ 网格作业状态的订阅和通知机制。
注:批式,交互式传统计算作业和通用服务调用作业在网格软件中分别简称为批式计算作业,交互式计算作业,服务作业。并统称为网格作业。
注:联合分配的问题可采用GT3 的解决方法(目前在GT3 中没有实现这个功能)。物理层资源产生竞争时交给物理资源本身处理。
3.2 接口及编程规范
从上图可以看出,作业服务可以对最终用户提供两个符合Grid service规范[6]的接口,即针对批处理作业提交的接口JobServicePortType和访问通用网格服务的接口ServiceBrokerPortType 。
为了方便最终用户使用网格软件作业服务,我们在这两个接口之上,为最终用户提供了统一的服务访问接口,作为用户访问物理服务或资源的唯一入口。
3.2.1 网格服务访问接口
最终用户对以服务形式包装的网格资源的访问过程类似于对Web Service的访问过程[7],其步骤包括:
1. 通过客户端的Stub(由GOS自动生成)的getServicePort调用获取服务接口。
getService的原型如下:
void getServicePort(
String code,
String instanceName,
String resourceRequirements);
其参数解释如下:
l code – 服务的编码
l instanceName – 临时服务实例的名字,如果以该名字指定的实例不存在,则GOS会自动创建新的实例。对于永久类型服务,该项参数忽略。
l resourceRequirements – 资源需求表,XML格式。例子如下:
<!-- 资源需求列表 -->
<resources>
<resource code="1234567”><!-- 虚拟资源的编码 -->
<requirements>
<!-- 资源需求: 属性名称 操作符 值-->
<requirement name="service.bill” op=”EQ” value=”once" />
<requirement name="service.price” op=”LE” value=”0.1" />
<requirement name="platform.machine_type” op=”EQ” value=”IBM SP" />
<requirement name="platform.node_num op=”GT” value=”2” />
</requirements>
</resource>
</resources>
资源需求(<requirement>元素)由资源属性名称(name)、操作符(op)和值(value)组成,目前版本中的属性查询表达式列表如下:
表1 资源需求属性表达式规范
名字 name
含义
可选操作符 op
值 value(例子)
service.bill
服务的计费方式
= !=
once, time(hours)
service.price
服务的单价
= > >= < <=
0.1
platform.machine_type
主机类型
= !=
PC,曙光3000,IBM SP...
platform.node_num
主机结点数目
= != > >= < <=
64,128 ...
platform.cpu_num
CPU数目
= != > >= < <=
1,2,4...
platform.cpu_speed
CPU速度
= != > >= < <=
500Mhz, 1Ghz ...
platform.cpu_type
CPU类型
= !=
Intel,Power PC...
platform.net_width
网卡速率
= != > >= < <=
10M,100M,1G...
platform.mem_totoal
内存大小
= != > >= < <=
512M, 1G ...
platform.disk_total
磁盘大小
= != > >= < <=
512M, 1G ...
platform.os_type
操作系统
= !=
linux, solaris...
platform.os_release
操作系统版本
= != > >= < <=
2.4.2, 5.1 ...
目前版本中,操作符的取值列表如下:
表2 操作符规范
操作符
含义
内部表示
EQ
等于
=
NQ
不等于
!=
GT
大于
>
GE
大于等于
>=
LT
小于
<
LE
小于等于
<=
2. 调用服务接口中的方法。
服务接口中的方法包括两部分:
a. 通用的服务访问方法,适用于所有网格资源,主要是对临时服务实例的生命周期管理和对服务数据(ServiceData)的一些操作,包括setTerminationTime, destroy, findServiceData, setServiceData和 subscribeServiceData 。对于永久类型网格服务,setTerminationTime和destory无效。对于没有ServiceData的网格服务,使用与ServiceData相关的方法则无效。
通用的方法由CommonServicePortType定义,如下
Interface CommonServicePortType {
// 功能:指定实例在某个时间销毁
// 参数:time – 时间
// 返回:成功, 无; 失败, GOSJobServiceException异常
void setTerminationTime (Calendar time);
// 功能:立即销毁实例
// 返回:成功, 无; 失败, GOSJobServiceException异常
void destroy ();
// 功能:获取ServiceData
// 参数:name – ServiceData的名字
// 返回:成功, ServiceData数据对象; 失败, GOSJobServiceException异常
Object findServiceData(String name);
// 功能:设置ServiceData
// name – ServiceData名字 obj –数据对象
// 返回:成功, 无; 失败, GOSJobServiceException异常
void setServiceData(String name, Object obj);
// 功能:订阅ServiceData,当ServiceData变化时接收通知消息
// name – ServiceData名字 obj –数据对象 timeout-连接超时设定
// 返回:成功, 无; 失败, GOSJobServiceException异常
void subscribeServiceData(String name, DataHandlerPortType callback, Calendar timeout);
}
b. 与服务本身相关的特定方法(application-specific),例如天气预报服务提供getForecastInformation方法,计数服务提供加(add),减(subtract)方法,批作业计算服务提供submit,suspend, resume等方法。
为了简化客户端的编程,定义这些服务特定方法的接口从CommonServicePortType继承。并且,所有的服务特定方法均有两个形式:同步方式和异步方式。它们以函数重载的方式提供。例如计数服务(CounterService)定义如下:
Interface CounterServicePortType extends CommonServicePortType{
int add(int value); // 同步方式的add
int subtract(int value); // 同步方式的subtract
// 异步方式的add
void add(int value, DataHandlerPortType callback, Calendar timeout);
// 异步方式的subtract
void subtract(int value, DataHandlerPortType callback, Calendar timeout);
}
客户端如果调用同步方式的方法,则会一直等到服务端执行完毕后返回结果。
客户端如果调用异步方式的方法,则可以不等到服务端执行完毕就返回(只是将请求发送到服务端)。而当服务端执行完毕后,结果数据会通知到客户端。因此异步方式方法需要两个额外的参数,即返回数据处理器(类似回调函数,用于处理服务端通知回来的数据)和订阅超时时间。
订阅/通知方式时的数据处理器实现DataHandlerPortType,定义如下:
public interface DataHandlerPortType
{
public void processData(Object data);
}
例子
下面是一个最终用户访问一个网格服务CounterService的例子:
// 新建Stub
CounterServiceLocator stub= new CounterServiceLocator();
// 获得接口
CounterServicePortType cspt = stub.getServicePort(”服务编码”, ”实例名”,”资源需求”);
// 同步方式调用
result = cspt.add(20);
// 异步方式调用
cspt.add(20, new MyDataHandler());
...
// 回调数据处理器
class MyDataHandler implements DataHandlerPortType {
public void processData(Object data) {
Integer result=(Integer)data;
System.out.println(“The result of add method:” + result);
}
3.2.2 批处理计算作业服务接口
批处理计算作业服务作为一种网格服务,按照上节所述的方式进行访问。其特定的方法由接口JobServicePortType定义,描述如下:
l submitJob
原型
int submitJob (String request, DataHandlerPortType callback)
功能
提交作业请求
参数
request 作业请求描述,XML格式 * callback 回调数据处理器
返回值
成功-返回作业标识 失败-抛出GOSJobServiceException异常
* 作业请求描述的规范
下面是一个XML格式的作业请求描述的例子:
<?xml version="1.0"?>
<job>
<parameters> <!-- 作业参数列表 -->
<!-- 作业参数:名称 值 -->
<parameter name="job.executable" value="/bin/bash"/>
<parameter name="job.arguments" value="blah blah blah"/>
</parameters>
</job>
作业参数(<parameter>元素)由名称(name)和值(value)组成,当前版本中作业参数的规定如下表,参数名字的格式按照“类别名称 . 参数名称”的形式指定。
表3 作业参数规范
参数名字 name
含义
值 value(例子)
job.executable
执行文件路径,如果其值是一个远程的虚拟文件名,则在执行前被拷贝到服务主机上
/usr/local/compute
job.arguments
命令行参数列表
-debug -verbose
job.directory
执行所在目录
/var/spool
job.stdin
标准输入文件,可以为虚拟文件名
/tmp/stdin
job.stdout
标准输出文件,可以为虚拟文件名
/tmp/stdout
job.stderr
标准错误输出文件,可以为虚拟文件名
/tmp/stderr
job.environment
执行程序时需设定的环境变量列表
PI=3.1415;VERSION=4
l runJob
原型
JobStatus runJob(String request)
功能
以阻塞方式运行作业,直到作业状态为DONE或FAILED才返回
参数
request 作业请求描述
返回值
成功-作业状态 失败-抛出GOSJobServiceException异常
l getJobStatus
原型
JobStatus getJobStatus(int id)
功能
查询作业当前状态
参数
id作业标识
返回值
成功-作业状态* 失败-抛出GOSJobServiceException异常
l suspendJob
原型
void suspendJob (int id)
功能
挂起作业执行 (需要结点管理作业软件支持)
参数
id作业标识
返回值
成功-无 失败-抛出GOSJobServiceException异常
l resumeJob
原型
Boolean resumeJob(int id)
功能
恢复作业执行 (需要结点管理作业软件支持)
参数
id作业标识
返回值
成功-无 失败-抛出GOSJobServiceException异常
l cancelJob
原型
void cancelJob (int id)
功能
取消作业执行
参数
id作业标识
返回值
成功-无 失败-抛出GOSJobServiceException异常
下面是综合使用JobServicePortType各个方法的一个例子:
int jobID;
String jobDesc = Utils.LoadFromFile(“job.xml”);
JobServiceLocator locator = new JobServiceLocator();
JobServicePortType js = locator.getServicePort(”计算服务编码”,”资源需求”,”实例名字”); // 获取接口
jobID = js.submitJob( jobDesc, null ); // 提交
JobStatus status = null;
while( ( status != JobStatusConstant.DONE ) && ( status != JobStatusConstant.FAILED )) {
sleep(10000); // 每隔10秒查询一次
status = js.getJobStatus(jobID); // 取状态
}
4 数据服务的应用层接口
4.1 数据服务
数据服务以实现数据共享为目标,主要涉及:数据传输服务、统一数据视图、数据统一访问以及数据元信息服务等内容。数据服务实现的逻辑层次如下图所示。
客户端
统一操作接口
数据代理服务
多资源协同
数据管理
数据传输
存储访问和管理
访问调度
元数据服务
数据元信息访问和管理
数据发布和注册管理
系统信息访问和管理
副本管理
和
选择
元信息访问接口
文档系统访问接口
文件系统访问接口
DB访问接口
DB2, Oracle, Sybase, SQLServer
HPSS, Tivoli, UniTree, DMF
Unix, NT
DB2, Oracle, Postgres
存储
资源
图3 数据服务逻辑结构
对用户来说,数据服务分为两个主要的部分,数据代理服务和元数据服务。数据代理服务的功能如下:
l、数据统一访问接口和协议
把整个存储抽象为一个虚拟的一体数据对象,面向用户提供一套功能完备、语法规范的API,目前打算提供的的API 如后表所示。功能:目录和数据的读写、创建、拷贝、插入等等。
2、访问调度
客户提出访问请求后,根据用户的需求,由调度程序来访问元服务器获取它的元信息,调度请求到合适地点上的数据服务,这里可以包含副本的选择、综合网络、计算和数据资源的调度,确定合适的数据位置进行访问,以便于数据操作。
3、存储访问管理
各种异构存储资源的访问和管理,从DRB 提供的公共协议和访问接口转换到各个局部存储资源的访问,存储系统的发布和发现、以及存储系统的预约等功能。
4、数据传输服务
确定数据采用何种协议进行数据传输,例如Gridftp,为用户提供高效、安全、强壮的传输功能。
元数据服务的主要功能是向上层提供数据、用户等各类元信息,包括:
1、数据元信息的访问与管理
2、存储资源及数据的统一命名
3、用户元信息的访问与管理
4、数据副本的管理与选择
5、为数据服务提供各存储资源的状态、存储空间等信息。
4.2 接口及编程规范
4.2.1 数据访问的接口
1、连接API
2、高级访问API
3、低级的文件类型API
4、底级的数据库类型的API
参考ODBC 的相关接口
4.2.2 数据传输的接口设计
1、控制函数
2、传输函数
5 用户服务的应用层接口
5.1 用户服务
网格软件以服务的方式提供用户管理功能,包括用户管理接口以及相应的工具。用户管理接口包括用户的注册、用户信息查询、注销等。网格软件用户服务以OGSA Grid Service 的方式提供对外接口。用户服务的主要任务是负责网格用户的全生命周期管理,用户还可利用用户服务对相应的信息进行修改和查询,同时用户服务还完成各个节点的用户信息的同步工作。
用户名字由外部名字和内部名字组成。在1.0 β版中,外部名字和内部名字一一对应,暂不考虑一个用户多重身份的问题。网格软件不对外部名字进行定义。用户的内部名字是全局唯一的,由用户身份证书DN 表示。
用户服务划分为以下几个子模块:
l 用户服务主模块(UserService类):该模块主要面向外部用户提供基本的管理功能,和其他模块配合实现用户各种信息库的更新。实现包括基本用户管理功能的接口(UserService接口)。
l 用户信息库操作子模块(UserInfoAccess类):该模块负责完成对用户信息库和动态信息库的访问,包括添加、删除、修改和读取等操作。
l 信息同步子模块(UserInfoSyn类):该模块主要负责实现用户信息同步请求的发送和接收,调用UserInfoAccess类中的各种方法实现各节点用户信息库的信息同步。
l 证书操作子模块(UserCertOp类):该模块主要实现用户服务和CA中心的交互,设置此模块主要是为了便于以后对CA和用户证书升级的支持。
各个子模块之间的类关系下图所示:
UserService
UserInfoAccess
UserInfoSync
UserCertOp
图4 用户服务模块类关系图
注:网格用户的登录(UserLogin)和注销(UserLogout)功能在网格软件1.0 β版中暂不实现。
5.2 接口及编程规范
用户服务的应用程序开发API按照OGSA的Grid Service接口规范提供,由接口UserServicePortType定义,接口UserServicePortType中定义的方法描述如下:
l RegisterUser
原型
Boolean RegisterUser(String userInfo)
功能
用户请求注册
参数
用户信息的XML 描述
返回值
成功-无 失败-抛出GOSUserServiceException异常
注册到国家网格中的用户需要调用网格软件用户管理UserServicePortType的RegisterUser方法,用户的有关信息以XML 格式提供,用户信息描述的例子如下:
<?xml version="1.0"?>
<user>
<common_infos> <!-- 用户的个人信息 -->
<info name="name" value="abcd"/><!-- 用户外部名 -->
<info name="passwd" value="abcd"/><!-- 用户外部名对应密码 -->
<info name="role" value="common"/><!-- 用户角色(特权) -->
<info name="email" value="abcd@ict.ac.cn"/><!-- 邮件地址 -->
<info name="post" value="xxxxxx"/><!-- 通信地址 -->
<info name="phone" value="12345678"/><!-- 电话 -->
</common_infos>
<attach_infos><!-- 不由用户决定的附属信息 -->
<info name="role" value="common"/><!-- 用户角色(特权) -->
</attach_infos>
</user>
其中,role代表用户所请求的特权级别,包括: common(普通用户), resadmin(资源管理员), nodeadmin(结点管理员),sysadmin(系统管理员)
l UnregisterUser
原型
Boolean UnregisterUser(),
Boolean UnregisterUser(String name, String passwd),
Boolean UnregisterUser(String userList)
功能
用户请求注销身份
参数
无-用证书注销;name/passwd-用名字/口令注销;userList-欲注销的一批用户(XML),需结点管理员或系统管理员权限
返回值
成功-无 失败-抛出GOSUserServiceException异常
l UserLogin
原型
Boolean UserLogin(),
Boolean UserLogin(String name, String passwd)
功能
用户登录
参数
name 用户注册名字 passwd 用户注册口令
返回值
成功-无 失败-抛出GOSUserServiceException异常
l UserLogout
原型
Boolean UserLogout(),
Boolean UserLogout(String name, String passwd)
功能
用户请求退出
参数
name 用户注册名字 passwd 用户注册口令
返回值
成功-无 失败-抛出GOSUserServiceException异常
l ModifyUserInfo
原型
Boolean ModifyUserInfo(String modifyInfo),
Boolean ModifyUserInfo(String name, String passwd, String modifyInfo)
功能
用户请求信息修改
参数
name/passwd-用名字/口令确认身份;modifyInfo-需要进行修改的用户信息属性名和修改后值(XML),格式同用户注册
返回值
成功-无 失败-抛出GOSUserServiceException异常
l QueryUserInfo
原型
String QueryUserInfo(),
String QueryUserInfo(String name, String passwd),
String QueryUserInfo(String userList)
功能
用户信息查询
参数
无-用证书查询;name/passwd-用名字/口令查询;userList-欲查询的用户列表(XML),需结点管理员或系统管理员权限。
返回值
成功-XML 格式用户信息 失败-抛出GOSUserServiceException异常
用户服务的接口API是按照OGSA的Grid Service接口规范提供的,所以网格软件用户服务API的客户端调用方式同作业服务。
6 网格管理的应用层接口
6.1 网格管理
网格管理主要完成网格软件系统服务,以及以网格资源方式提供的物理服务的部署工作。网格管理服务的安全性由管理员用户的证书保证。网格软件网格管理服务将以OGSA Grid Service 的方式提供对外接口。提供的具体功能包括:
§ 网格软件系统服务的部署,配置和维护
§ 物理资源(服务)的部署
6.2 接口及其编程规范
l DeployService
函数名称
Void RegisterService (String serviceDesc)
输入参数
serviceDesc 注册服务的描述,XML 格式
返回值
成功-无;失败-抛出GOSSysAdminServiceException异常
功能描述
向国家网格部署一个物理服务
部署到国家网格中的服务需要调用网格软件系统管理部署物理服务,XML 格式服务描述的例子如下:
<?xml version="1.0"?>
<service>
<stat_props> <!-- 服务静态属性 -->
<stat_prop name="code" value="100328"/> <!-- 虚拟服务的编码 -->
<!-- 服务的调用地址 -->
<stat_prop name="address" value=
"http://www.cngrid.org.cn/vega/services/weather"/>
<!-- 服务的WSDL 或GWSDL 文档地址 -->
<stat_prop name="wsdl" value=
"http://www.cngrid.org.cn/vega/services/weather?wsdl"/>
<stat_prop name="name" value="CityWeatherForcast"/> <!-- 服务的名称 -->
<stat_prop name="type" value="gs"/> <!-- 服务的类型 -->
<stat_prop name="authentication" value="gsi"/> <!-- 服务的认证方式 -->
<stat_prop name="authorization" value="gridmap"/> <!-- 服务的授权方式 -->
<!-- 服务的grid_map_file文件 -->
<stat_prop name="grid_map_file" value="<grid_map_file location>"/>
<stat_prop name="bill" value="once"/> <!-- 服务计费方式(次) -->
<stat_prop name="price" value="0.1"/> <!-- 服务的单价(RMB) -->
<stat_prop name="concurrency" value= "100"/> <!-- 允许并发的请求数量 -->
</stat_props>
<dyna_props> <!-- 服务动态属性 -->
<dyna_prop name="srvsload"/> <!-- 服务的动态负载 -->
</dyna_props>
</service>
虚拟服务的编码是用户从国家网格服务注册中心获得的,用户获得编码的同时,也获得了该种服务的接口规范,即相应的WSDL 文档。用户对物理服务的开发(对外的PortType 接口)必须遵循该WSDL 文档。
静态属性元素(<stat_prop>)中的内容还可包含如下的主机系统信息,便于计算作业服务等选择资源时使用:
<stat_props> <!-- 服务静态属性 -->
…
<stat_prop name="machine_type" value="cluster"/> <!-- 计算结点类型 -->
<stat_prop name="os_type" value="linux"/> <!-- 计算结点操作系统类型 -->
<stat_prop name="os_release" value="2.4.2"/> <!-- 计算结点操作系统版本 -->
<stat_prop name="node_number" value="4"/> <!-- 主机数量 -->
<stat_prop name="cpu_number" value="2"/> <!-- 每主机处理机数量 -->
<stat_prop name="cpu_speed" value="650"/> <!-- 每主机处理机速度(MHz) -->
<stat_prop name="cpu_type" value="intel"/> <!-- 主机处理机类型 -->
<stat_prop name="net_width" value="100"/> <!-- 网络连接速率(Mb) -->
<stat_prop name= "mem_total " value="2048"/> <!-- 主存总量(MB) -->
<stat_prop name= "disk_total" value="120"/> <!-- 辅存总量(GB) -->
…
</stat_props>
动态属性元素(<dyna_prop>)中的内容可依照服务数据(Service Data)能够提供的,统一的服务动态属性填写,如服务和主机的负载等:
<dyna_props><!-- 服务动态属性 -->
…
<dyna_prop name="srvs_load"/> <!-- 服务的动态负载 -->
<dyna_prop name="loadavg"/> <!-- 服务所在平台的动态负载 -->
<dyna_prop name="cpu_free "/> <!-- 服务所在平台的处理机剩余利用率 -->
<dyna_prop name="mem_free"/> <!-- 服务所在平台的剩余主存 -->
<dyna_prop name="disk_free"/> <!-- 服务所在平台的剩余辅存 -->
…
</dyna_props>
注:在网格软件1.0 β版中,如果出现国家网格服务注册中心中不存在该类服务编码及接口描述的情况,则用户需要向国家网格服务注册中心离线提出增设该类服务编码及接口描述的申请,待确定后方可按上述规范对服务进行开发和部署。
表4 服务属性取值规范
属性类别
服务属性名称
含义
取值范围
取值说明(缺省)
机器无关静态属性
code
虚拟服务编码
000001~399999
必须指定(无)
address
服务的调用地址
URI
必须指定(无)
wsdl
服务的WSDL或GWSDL文档地址
URI
必须指定(无)
name
服务的名称
字符串
(无)
type
服务的类型
gs, ws
(gs)
authentication
服务的认证方式
gsi, none
(gsi)
grid_map_file
grid_map_file 文件本地存储位置
URI
必须指定(无)
bill
服务的计费方式
once, time
(once)
price
服务的单价
浮点
按RMB结算(无)
concurrency
允许并发的请求数量
正整数
(无)
机器相关静态属性
machine_type
计算结点类型
cluster, single
(无)
os_type
计算结点操作系统类型
linux, aix, winnt, win2000
(无)
os_release
计算结点操作系统版本
字符串
(无)
node_number
主机数量
正整数
(无)
cpu_number
每主机处理机数量
正整数
(无)
cpu_type
处理机类型
pentium III, athlon XP, power PC
(无)
cpu_speed
处理机速度
正整数
(无)
net_width
网络带宽
正整数
(无)
mem_total
内存容量
正整数
(无)
disk_total
外存容量
正整数
(无)
机器无关动态属性
srvs_load
服务动态负载
浮点
(无)
机器相关动态属性
loadavg
主机负载
浮点
(无)
cpu_free
结点处理机剩余利用率
浮点
百分比,(无)
mem_free
结点内存剩余量
浮点
百分比,(无)
disk_free
结点外存剩余量
浮点
百分比,(无)
l GetServiceDesc
函数名称
String GetServiceDesc(String serviceCode, String address)
输入参数
服务的编码,服务的访问地址。
返回值
成功- XML 格式的服务描述信息;失败-抛出GOSSysAdminServiceException异常
功能描述
获得指定物理服务的描述信息
GetServiceDesc 返回的服务描述信息格式同注册服务时所提供的服务描述信息。
l SetServiceDesc
函数名称
void SetServiceDesc(String serviceCode, String address, String serviceDesc)
输入参数
服务的编码,服务的访问地址,srvcDescrpt 服务描述。
返回值
成功-无;失败-抛出GOSSysAdminServiceException异常
功能描述
重置已有的物理服务信息
l UndeployService
函数名称
void UndeployService(String serviceCode, String address)
输入参数
服务的编码,服务的访问地址
返回值
成功-无;失败-抛出GOSSysAdminServiceException异常
功能描述
撤销一个已经部署到国家网格中的物理服务
系统管理的用户层接口API是按照OGSA的Grid Service接口规范提供的,所以网格软件系统服务API的客户端调用方式同作业服务。
7 网格监控的应用层接口
7.1 网格监控系统
网格监控系统是系统软件中独立的功能模块,负责全网格中所有结点的系统级监控任务。监控的层次划分和主要功能自下而上为主机系统基本信息和状态信息,结点基本信息和状态信息,以及网格基本信息和状态信息。网格监控系统由监控客户端,监控服务和监控数据提供者三部分组成,其结构如下图所示。
在每个结点上,监控服务器服务(MSS)负责收集和发布本结点内所有主机系统的静态信息和动态信息。监控服务器服务是一种物理资源,如果通过网格软件系统管理,已经部署到国家网格中,则可以使用本文第3章作业服务的ServiceBrokerPortType 服务作业的接口,访问监控服务器服务。但考虑到监控任务的实时性,在客户端也可以直接访问监控服务器服务。因此本章将详细介绍监控服务器服务的用户层接口,便于监控应用的开发人员进行二次开发。
在网格软件1.0β版中,将附带功能完整的监控客户端程序(MDA, MC)。
7.2 接口及其编程规范(MSS)
l setWarnCondition
函数名称
void setWarnCondition(String resourceName, int thresholdValue)
输入参数
资源名称,告警阈值
返回值
成功-无;失败-抛出GOSMonServerServiceException异常
功能描述
按照指定条件设置告警参数
表5 资源名称取值规范
资源名称
含义
CPU
处理机
MEM
内存
SWAP
交换区
DISK
外存
IO
I/O
LOAD
系统负载
NET
网络负载
PROC
进程
l getHostInfo
函数名称
String getHostInfo()
输入参数
无
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取该组织内部所有主机的名称。用于后续通过指定主机名称获取资源监控数据
返回XML结果格式的例子:
<?xml version=”1.0”?>
<Hosts>
<Host>
<name>HostA01</name>
<ID>001</ID>
</Host>
<Host>
<name>HostA02</name>
<ID>002</ID>
</Host>
…
</Hosts>
l getAllResource
函数名称
void getAllResource(String resourceName)
输入参数
资源名称
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取当前网格服务器内部所有主机的某种指定资源的数据。一次只能获取一种指定资源的监控数据
返回XML结果格式(以CPU为例):
<?xml version=”1.0”?>
<HostResourceValues>
<HostResourceValue>
<name>HostA01</name>
<ID>001</ID>
<CPUs>
<CPU>
<CPUID>1</CPUID>
<CPUidle>96.2</CPUidle><!-- CPU 空闲利用率,采用%形式 -->
<CPUnice>0</CPUnice><!-- CPU 用户模式利用率(low priority),采用%形式 -->
<CPUsystem>3.8</CPUsystem><!-- CPU 系统模式利用率,采用%形式 -->
<CPUuser>0</CPUuser><!-- CPU 用户模式利用率,采用%形式 -->
</CPU>
</CPUs>
</HostResourceValue>
<HostResourceValue>
<name>HostA02</name>
<ID>002</ID>
<CPUs>
<CPU>
<CPUID>1</CPUID>
<CPUidle>56.7</CPUidle>
<CPUnice>0</CPUnice>
<CPUsystem>30.8</CPUsystem>
<CPUuser>2.5</CPUuser>
</CPU>
</CPUs>
</HostResourceValue>
…
</HostResourceValues>
对于其它资源,返回如下内容:
MEM:
<MEMfree><!-- 采用%形式 -->
<MEMused><!-- 采用%形式 -->
<MEMcached><!-- 采用%形式 -->
<MEMshared><!-- 采用%形式 -->
<MEMbuffers><!-- 采用%形式 -->
SWAP:
<SWAPfree><!-- 采用%形式 -->
DISK:
<DISKfree><!-- 采用%形式 -->
IO:
<IObytesin><!-- 采用原始数值形式 -->
<IObytesout><!-- 采用原始数值形式 -->
LOAD:
<LOADone><!-- 采用原始数值形式 -->
<LOADfive><!-- 采用原始数值形式 -->
<LOADfifteen><!-- 采用原始数值形式 -->
NET:
<NETrevdbytes><!-- 采用原始数值形式 -->
<NETpkgsin><!-- 采用原始数值形式 -->
<NETrevderrs><!-- 采用原始数值形式 -->
<NETsentbytes><!-- 采用原始数值形式 -->
<NETpkgsout><!-- 采用原始数值形式 -->
<NETsenterrs><!-- 采用原始数值形式 -->
PROC:
<PROCtotal><!-- 采用原始数值形式 -->
<PROCrun><!-- 采用原始数值形式 -->
l getOneHostInfo
函数名称
void getOneHostInfo(String HostName)
输入参数
主机名称
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取指定主机的静态资源和时间字符资源数据
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<NodeIPs>
<Netnum>2</Netnum>
<NodeIP>10.0.2.30<NodeIP>
<NodeIP>11.0.1.18<NodeIP>
</NodeIPs>
<CPUInfos>
<CPUnum>1<CPUnum>
<CPUInfo>
<CPUID>1</CPUID>
<CPUspeed>1.7G<CPUspeed>
<CPUtype>Pentium 4</CPUtype>
</CPUInfo>
</CPUInfos>
<MEMtotal>256M</MEMtotal>
<SWAPtotal>128M</SWAPtotal>
<DISKtotal>40</DISKtotal>
<OSname>Linux</OSname>
<OSrelease>2.4.18-14bigmem</OSrelease>
<MachineType>Cluster</MachineType>
<BootTime>Mon Aug 19 08:03:09 1996</BootTime>
<SYSclock>Mon Aug 19 09:12:44 1996</SYSclock>
</HostInfo>
l getAllHostInfo
函数名称
void getAllHostInfo()
输入参数
无
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取当前网格服务器内部所有主机的静态资源和时间字符资源数据
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfos>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<NodeIPs>
<Netnum>2</Netnum>
<NodeIP>10.0.2.30<NodeIP>
<NodeIP>11.0.1.18<NodeIP>
</NodeIPs>
<CPUInfos>
<CPUnum>1<CPUnum>
<CPUInfo>
<CPUID>1</CPUID>
<CPUspeed>1.7G<CPUspeed>
<CPUtype>Pentium 4</CPUtype>
</CPUInfo>
</CPUInfos>
<MEMtotal>256M</MEMtotal>
<SWAPtotal>128M</SWAPtotal>
<DISKtotal>40</DISKtotal>
<OSname>Linux</OSname>
<OSrelease>2.4.18-14bigmem</OSrelease>
<MachineType>Cluster</MachineType>
<BootTime>Mon Aug 19 08:03:09 1996</BootTime>
<SYSclock>Mon Aug 19 09:12:44 1996</SYSclock>
</HostInfo>
<HostInfo>
…
</HostInfo>
…
</HostInfos>
l getOneHostTotal
函数名称
void getOneHostTotal(String HostName)
输入参数
主机名称
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取当前指定主机的全部资源数据(包括静态、时间字符和动态资源数据)
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<NodeIPs>
<Netnum>2</Netnum>
<NodeIP>10.0.2.30<NodeIP>
<NodeIP>11.0.1.18<NodeIP>
</NodeIPs>
<CPUInfos>
<CPUnum>1<CPUnum>
<CPUInfo>
<CPUID>1</CPUID>
<CPUspeed>1.7G<CPUspeed>
<CPUtype>Pentium 4</CPUtype>
</CPUInfo>
</CPUInfos>
<MEMtotal>256M</MEMtotal>
<SWAPtotal>128M</SWAPtotal>
<DISKtotal>40</DISKtotal>
<OSname>Linux</OSname>
<OSrelease>2.4.18-14bigmem</OSrelease>
<MachineType>Cluster</MachineType>
<BootTime>Mon Aug 19 08:03:09 1996</BootTime>
<SYSclock>Mon Aug 19 09:12:44 1996</SYSclock>
<CPUs>
<CPU>
<CPUID>1</CPUID>
<CPUidle>96.2</CPUidle>
<CPUnice>0</CPUnice>
<CPUsystem>3.8</CPUsystem>
<CPUuser>0</CPUuser>
</CPU>
<CPUs>
<MEMfree>5</MEMfree>
<MEMused>95</MEMused>
<MEMcached>60</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>4<MEMbuffers>
<SWAPfree>100</SWAPfree>
<DISKfree>54</DISKfree>
<IObytesin>3739562</IObytesin>
<IObytesout>901338</IObytesout>
<LOADone>0.04</LOADone>
<LOADfive>0.08</LOADfive>
<LOADfifteen>0.09</LOADfifteen>
<NETrevdbytes>3739562</NETrevdbytes>
<NETpkgsin>21349</NETpkgsin>
<NETrevderrs>0</NETrevderrs>
<NETsentbytes>901338</NETsentbytes>
<NETpkgsout>10669</NETpkgsout>
<NETsenterrs>0</NETsenterrs>
<PROCtotal>168</PROCtotal>
<PROCrun>23</PROCrun>
</HostInfo>
l getAllHostTotal
函数名称
void getAllHostTotal()
输入参数
无
返回值
成功-返回XML 格式监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取当前网格服务器内部所有主机的全部资源数据(包括静态、时间字符和动态资源数据)
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfos>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<NodeIPs>
<Netnum>2</Netnum>
<NodeIP>10.0.2.30<NodeIP>
<NodeIP>11.0.1.18<NodeIP>
</NodeIPs>
<CPUInfos>
<CPUnum>1<CPUnum>
<CPUInfo>
<CPUID>1</CPUID>
<CPUspeed>1.7G<CPUspeed>
<CPUtype>Pentium 4</CPUtype>
</CPUInfo>
</CPUInfos>
<MEMtotal>256M</MEMtotal>
<SWAPtotal>128M</SWAPtotal>
<DISKtotal>40</DISKtotal>
<OSname>Linux</OSname>
<OSrelease>2.4.18-14bigmem</OSrelease>
<MachineType>Cluster</MachineType>
<BootTime>Mon Aug 19 08:03:09 1996</BootTime>
<SYSclock>Mon Aug 19 09:12:44 1996</SYSclock>
<CPUs>
<CPU>
<CPUID>1</CPUID>
<CPUidle>96.2</CPUidle>
<CPUnice>0</CPUnice>
<CPUsystem>3.8</CPUsystem>
<CPUuser>0</CPUuser>
</CPU>
<CPUs>
<MEMfree>5</MEMfree>
<MEMused>95</MEMused>
<MEMcached>60</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>4<MEMbuffers>
<SWAPfree>100</SWAPfree>
<DISKfree>54</DISKfree>
<IObytesin>3739562</IObytesin>
<IObytesout>901338</IObytesout>
<LOADone>0.04</LOADone>
<LOADfive>0.08</LOADfive>
<LOADfifteen>0.09</LOADfifteen>
<NETrevdbytes>3739562</NETrevdbytes>
<NETpkgsin>21349</NETpkgsin>
<NETrevderrs>0</NETrevderrs>
<NETsentbytes>901338</NETsentbytes>
<NETpkgsout>10669</NETpkgsout>
<NETsenterrs>0</NETsenterrs>
<PROCtotal>168</PROCtotal>
<PROCrun>23</PROCrun>
</HostInfo>
<HostInfo>
…
</HostInfo>
…
</HostInfos>
l getOneHostHistory
函数名称
void getOneHostHistory(String HostName, String resourceName, time beginTime , time endTime)
输入参数
主机名称,资源名称,开始时间,结束时间
返回值
成功-返回XML 格式历史监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取指定主机的特定时间范围内的某种资源数据(包括静态、时间字符和动态资源)
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfos>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<HistoryValues>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:12:00 1996</TimeStamp>
<MEMfree>5</MEMfree>
<MEMused>95</MEMused>
<MEMcached>60</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>4<MEMbuffers>
</HistoryValue>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:17:00 1996</TimeStamp>
<MEMfree>29</MEMfree>
<MEMused>71</MEMused>
<MEMcached>45</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>2<MEMbuffers>
</HistoryValue>
<HistoryValue>
…
</HistoryValue>
…
</HistoryValues>
</HostInfo>
</HostInfos>
l getAllHostHistory
函数名称
void getAllHostHistory(String resourceName, time beginTime, time endTime)
输入参数
资源名称,开始时间,结束时间
返回值
成功-返回XML 格式历史监控信息;失败-抛出GOSMonServerServiceException异常
功能描述
获取所有主机的特定时间范围内的某种资源数据(包括静态、时间字符和动态资源)
返回XML结果格式的例子:
<?xml version=”1.0”?>
<HostInfos>
<HostInfo>
<name>HostA01</name>
<ID>001</ID>
<HistoryValues>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:12:00 1996</TimeStamp>
<MEMfree>5</MEMfree>
<MEMused>95</MEMused>
<MEMcached>60</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>4<MEMbuffers>
</HistoryValue>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:17:00 1996</TimeStamp>
<MEMfree>29</MEMfree>
<MEMused>71</MEMused>
<MEMcached>45</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>2<MEMbuffers>
</HistoryValue>
<HistoryValue>
…
</HistoryValue>
…
</HistoryValues>
</HostInfo>
<HostInfo>
<name>HostA02</name>
<ID>002</ID>
<HistoryValues>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:12:00 1996</TimeStamp>
<MEMfree>75</MEMfree>
<MEMused>25</MEMused>
<MEMcached>10</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>4<MEMbuffers>
</HistoryValue>
<HistoryValue>
<TimeStamp>Mon Aug 19 09:17:00 1996</TimeStamp>
<MEMfree>19</MEMfree>
<MEMused>81</MEMused>
<MEMcached>45</MEMcached>
<MEMshared>0</MEMshared>
<MEMbuffers>2<MEMbuffers>
</HistoryValue>
<HistoryValue>
…
</HistoryValue>
…
</HistoryValues>
</HostInfo>
</HostInfos>
上述监控服务器服务的接口API是按照OGSA的Grid Service接口规范提供的,所以网格软件监控服务器服务API的客户端调用方式同作业服务。
8. 用户环境
用户环境包括使用环境和开发环境。使用环境是网格浏览器,通用浏览器和专用客户端;开发环境是网格软件对外提供的API(GOS API),客户端开发包,以及具有特定功能的客户端工具集(GSSL 环境)。在网格软件1.0β版中只提供GOS API,其它支持将在后续版本中提供。
前文所述GOS API 将以Java 开发包(jar)的形式提供给国家网格应用开发人员,网格软件1.0β版不提供源代码。源代码将随网格软件1.0正式版发布。该开发包中将附有本文,作为国家网格应用开发的支持,并将在国家网格的网站(www.cngrid.org.cn)上开辟程序员讨论区,bug提交区和邮件列表,公布网格软件的开发人员邮件地址,解答并解决在开发过程中用户遇到的问题。
9. 参考文献
1、Overview of the Grid Security Infrastructure, http://www.globus.org/security/overview.html
2、XML Signature, http://www.w3.org/Signature/
3、XML Encryption, http://www.w3.org/Encryption/2001/
4、GT3 Security Support, http://www-unix.globus.org/ogsa/docs/alpha3/security.html
5、Java CoG Kit, http://www-unix.globus.org/cog/java/index.php
6、Open Grid Services Infrastructure v1.0 (Draft 29, April 5, 2003),
http://www.gridforum.org/ogsi-wg/drafts/draft-ggf-ogsi-gridservice-29_2003-04-05.pdf
7、Web service activities, http://www.w3.org/2002/ws/
本文作者
徐志伟 谢向辉 肖侬 李伟,中科院计算所 江南计算所 国防科大计算机学院
个人站点:http://vega.ict.ac.cn/ 。可以通过电子邮件 liwei@ict.ac.cn 联系到他。原文出处
http://www.gisway.com/StudyDoc/CnGridMan.htm
更多阅读
ICEM-CFD如何划分网格1/5 icem网格划分教程
ICEM-CFD如何划分网格(1/5)——简介教你如何运用ICEM-CFD软件划分房间分析模型网格,画好的网格将为分析房间里的空气内流场做准备,从而为提高房间舒适度设计提供优化建议。整个分析分为四部分:第一部分《DesignModeler如何建立房间空气分
从哪些角度进行手机软件测试? 苹果手机测角度软件
?对于当前背景下的手机软件测试来说,要做好手机软件测试,主要从以下几个角度进行测试:UI测试,功能模块测试,交叉事件测试,容量性测试,用户手册测试等。UI测试用户界面测试指测试用户界面的风格是否满足客户要求,文字是否正确,页
转载……TestDirector用户手册3 testdirector使用手册
所有的TestDirector模块都包括如下内容:TestDirector工具栏(TestDirector Toolbar)位于TestDirector工程名的紧上面。假如此工具栏不可见,请点击ShowToolbar按钮。关于TestDirector工具栏的更多信息,请查看第18页的“TestD
几款常用的房屋设计软件 二层简单一点的别墅图
几款常用的房屋设计软件——简介给大家介绍几款常用的房屋设计软件。几款常用的房屋设计软件——方法/步骤几款常用的房屋设计软件 1、一、酷家乐特色:速度很快,可测风水缺点:功能相对较少几款常用的房屋设计软件 2、界面美观:★★
广联达预算软件应用笔记----内部资料哦 广联达预算软件培训
广联达应用笔记----内部资料哦造价员(预算员)培训钟老师 15942651045,QQ 1220798537,QQ交流群:2368321931进行工程量清单编制的时