460 likes | 601 Views
GT 、 GT3 及 GT3 下的服务开发 李春江. Outline. Globus 项目简介 GT 的发展历程和版本 GT2.x 的体系结构 GT3 的体系结构 GT3 的分类及下载 GT3 的安装 GT3 core 介绍 GT3 下网格服务开发实例 结束语. Globus 项目简介 经历了网格计算发展的 3 个阶段. 发起, 90 年代中期 ( 元计算 ) I-WAY 项目,目标是把美国境内的多个高性能计算中心通过高性能网络联接起来。
E N D
Outline • Globus项目简介 • GT的发展历程和版本 • GT2.x的体系结构 • GT3的体系结构 • GT3的分类及下载 • GT3的安装 • GT3 core介绍 • GT3下网格服务开发实例 • 结束语
Globus项目简介经历了网格计算发展的3个阶段 • 发起,90年代中期 (元计算) I-WAY项目,目标是把美国境内的多个高性能计算中心通过高性能网络联接起来。 I-WAY项目最终用10个带宽和协议并不完全相同的网络将位于美国17个不同地点的60多个组织的超级计算设备、数据资源联接起来,构成了一个超级计算环境。
Globus项目简介经历了网格计算发展的3个阶段 • 计算网格阶段 (96-2002) 迅速发展,赢得广泛关注。 其开发的工具包GT成为事实上的构建网格的标准。 • 服务网格阶段 (2002- ) 与Leading IT Company、W3C组织等企业和研究机构密切合作,带动整个网格计算的发展。
Globus项目简介参与的科研单位 • Globus 是美国Argonne国家实验室的项目 出始阶段全美有10多所大学和研究机构参与 • 目前的主要参与者 南加州大学的信息科学学院、芝加哥大学、爱丁堡大学、瑞典的并行计算机中心等 • 与IT公司的合作 特别是与IBM的合作。包括IBM红皮书,GT3的代码开发,OGSI规范的制定
Globus项目简介当前的情况 • 处于领导地位,对网格发展举足轻重 • 组成了Globus联盟(Globus Alliance) • 开发的网格中间件模块(GT系列软件及其中 的组件)已经成为Leading IT 公司推出的Grid产品的基础。
GT的发展历程和版本 • 最早在I-WAY项目中开发的软件 I-POP server CRB(Computational Resource Broker) Nexus,两层的通信库,支持自动配置机制,如TCP/IP 和AAL5 (面向ATM)。MPICH和CAVEcomm都面向Nexus进行了扩展
GT的发展历程和版本 • 1999年推出Globus Toolkit 的第一个版本 其后的主要版本有1.1.3和1.1.4 (储瑞) • 2002年初推出2.0版,年底推出2.2版(IBM红皮书) • 2003年推出GT3.0 的alpha, beta, 正式版,3.01,3.02,目前网站上可以下载到3.2版,从计算网格向服务网格迈进,预期面向WSRF将推出GT4. • 在推出GT3.0的同时,也推出GT2.4版,继续支持计算网格
GT2.x的体系结构主要功能 • 安全服务。Globus结合了目前成熟的分布式安全技术,并针对计算网格环境进行了一定的扩展实现了,实现了网格安全协议,为其它网格服务提供了安全保证。 • 信息服务。提供了网格环境下信息收集、存储、分发、查询的机制。 • 资源管理。屏蔽了网格底层计算资源的异构性,实现了对计算资源的远程访问。 • 数据管理。提供了副本目录服务和可靠数据传输服务。
GT3的分类及下载各组成软件包简介 • GT3 Core:即指Grid Service 一段,提供了基本的网格服务和接口。 • GT3 Security Services:安全对于一个网格应用是非常重要的。GT3 的安全服务可以限制对Grid Service 的访问,只有那些经过安全认证的节点才允许访问。GT3 提过了多种的安全技术,如SSL 和X.509数字证书认证。
GT3的分类及下载各组成软件包简介 • GT3 Base Services:GT3 基础服务包含了3 个部分。 • Job Management Services 提供了一种远程提交和监视作业的方法,遵循了OGSI(Open Grid Services Infrastructure)定义的接口,使用了基于XML的WSDL(Web Services Description Language)。并且提供了一个客户端命令:managed-job-globusrun,通过激活Master Managed Job Factory Service(MMJFS)来提交作业。 • Index Services Index services 主要使用在发现服务的操作中,基本上它们提过了一个查询和产生Service Data 的一个方法。 • Reliable File Transfer(RFT)Services 又叫做mutltiRFT 是数据管理实现的一部分,其他的两部分是GridFTP 和RLS(Replica Relocation Service)。它提供了从客户端到网格服务的可靠文件传输(RFT)的接口。在客户端,有一个基于java 的程序叫RFTClient。在服务器端,数据管理就使用了GT2 中的GridFTP 守护进程。
GT3的分类及下载各组成软件包简介 • GT3 Data Services: 包含了Replica Management。当我们处理大数据集的时候,我们通常不会把整个数据集都下载下来,而只是喜欢使用其中的一小部分。Replica Management 将会对我们使用过的数据子集进行跟踪管理。 • Other Grid Services: 其他可以运行在顶部的非GT3 服务。
GT3的分类及下载分类包简介 • GT3 All Services(UNIX 环境) 包含了所有GT2.x 和GT3.x 的程序。提供了GT3 内核和所有的GT3 服务,只能安装在UNIX 环境下。包括Binary 版本和Source 版本。源码版本中不仅包含了GT3 的代码,也包含了GT2.4.3 的源码包。同时,也包含了RLS安装包,不过除非预先安装了IODBC(Independent Open Database Connectivity,实现了ODBC和X/Open 的标准,与平台无关且开放源码),否则安装时会跳过RLS 安装包。二进制版本中不仅包含了GT3 的代码,也包含了GT2.4.3 的二进制包。
GT3的分类及下载分类包简介 • Base Services(UNIX 环境) 包含了GT3 和其他支持工具中新增的服务。不仅包含了GT3 核心服务,GT3 GRAM 的基本服务,索引服务,可靠文件传输服务,也提供了使用可靠文件传输的GridFTP 服务。只有binary 版本,且只能运行在UNIX 环境下。 • GT3 GARs(UNIX 和Windows 环境) 提供了GT3 中用Java 编写的高级服务,必须先安装GT3 Core,然后在gars 中运行“ant deploy”。GT3 GARs 可运行于UNIX 和Windows 环境下。与Base services 相比,GARs 不包含GT3 GRAM 和GridFTP 服务。 • Core(UNIX 和Windows 环境) 只提供GT3 的内核,是GT3 中OGSI 的实现部分。提供Binary 版本和Source 版本。 • Replica Location Service (UNIX 环境) 只包含了复制定位服务(Replica Location Service),这部分服务其实已经包括在Allservices 的安装包中了。
GT3的安装安装流程和配置 • 环境安装流程 Java →→ Apache ant →→ Junit →→Jakarta oro →→ PostgreSQL(如果jdk目录下的\jre\lib目录下没有axis.jar文件,则安装Apache Axis ) • GT3的安装流程 GT3安装→→安全证书安装→→MMJFS的安装 • 配置 环境变量,gsi配置(CA,生成证书) • 配置MMJFS grid-mapfile,grim-port-type.xml
GT3的安装启动和察看 • 启动服务容器 globus-start-container • 察看服务 ant gui
GT3 Core介绍 • OGSI Implementation • Interfaces WSDL, XML Schema Default Mix-in Implementations • GridService, Factory, HandleResolver, Registration, NotificationSource, NotificationSink, NotificationSubscription • GSH and GSR API • GSDL Extensions to WSDL (Service Data descriptions and values)
GT3 Core介绍 • GridService PortType • Soft-state timeout • Destruction • Service Data queries • GridService Service Data ServiceDataNames, FactoryHandle, QueryExpressionTypes, CurrentTime, TerminationTime • All Grid services inherit from this implementation
GT3 Core介绍 • Factory PortType • Instance Deployment and Registration Create deployment descriptor information and register in internal registry • Instance Activation Load configuration and meta data into instances and call postCreate() • Registry Inspection WS-IL document • Default Generic Factory Implementation Creates instances of configured class with default constructor • Factory Service Data CreatesPortTypes, CreationInputTypes
GT3 Core介绍 • HandleResolver and Registration PortTypes HandleResolver • Http and Https resolver service • Container Redirection (used in virtual hosting environment) • HandleResolver Service Data HandleResolverSchemes • One service per container Registration • Registration Service Data RegistrationExtensibilityTypes
GT3 Core介绍 • Notification PortTypes • Default NotificationSource publish/subscribe implementation creating NotificationSubscription services • Support for Service Data name subscriptions • Asynchronous message delivery to sinks • Hooked into ServiceData API and Notification Framework • NotificationSink client wrapper API- NotificationSinkManager • NotificationSubscription service implementation – can be deactivated and persisted • Subscription Service Data SubscriptionExpression, SinkLocator
GT3 Core介绍 • HandleHelper GSH GSR GSH parsing • Extended JAX-RPC ServiceLocator GSH GSR • GSR API Get ServiceData descriptions Get ServiceData values Get PortTypes Get Endpoints Get Handles Get WSDL/DOM representation URL GSR OGSI ServiceLocator GSR
GT3 Core介绍 • GSDL Extensions to WSDL • ServiceData descriptions WSDL 1.1 compliant extension of wsdl:definitions <<gsdl:serviceDataDescription name="QueryExpressionTypes" element="gsdl:queryExpressionType" minOccurs="1" maxOccurs="unbounded" mutability="append"> <</gsdl:serviceDataDescription> • ServiceData values - loaded into service at activation time <gsdl:serviceData name="QueryExpressionTypes"> <gsdl:queryExpressionType xmlns:gsdl="http://www.gridforum.org/namespaces/2002/10/gridServices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:QName"> gsdl:queryByServiceDataName </gsdl:queryExpressionType> </gsdl:serviceData>
GT3 Core介绍 • Container Design • Modeled after EJB/Servlet • Container of Components – Grid Services • Implements System Infrastructure • Deploy Services into portable Container • Container can be hosted in many hosting environments but always provides the same interface to services • Container implements OGSI on behalf of applications • Powerful Infrastructure Reuse model, example Query/Notification Framework
GT3 Core介绍 • Java OGSI Container • Standardized through GGF –initial draft submitted to GGF5 July 2002 • Sits on top of JAX-RPC • Supports J2SE and J2EE • Specifies contract/interfaces between services and container • Service Activation, Service Registration, Service Properties, Service Data API
GT3 Core介绍 • Activation/Deactivation Design • Pluggable Activators/Deactivators • Default implementations provided • Lazy Load Activator • TTL/LRU Deactivator • Can be applied both to recoverable (persistent) as well as transient service instances
GT3 Core介绍 • Service Data API • ServiceDataSet ServiceData myServiceData = serviceDataSet.create(“MyServiceDataName”); … serviceDataSet.add(myServiceData); • ServiceData wrapper serviceData.setValue(myValue); serviceData.notifyChange(); • ServiceDataType serviceDataType.getName(); serviceDataType.getGoodUntil(); • AnyHelper MyValueType myValue = (MyValueType) AnyHelper.getSingleAny(serviceDataType);
GT3 Core介绍 • QueryEngine queryEngine.registerEvaluator(myEvaluator, MyQueryExpression.class); • NotificationEngine notificationEngine.registerEvaluator(myEvaluator, MyNotificationExpression.class); • ExpressionEvaluator public interface ExpressionEvaluator { public Object evaluate(Object expression, ServiceDataSet serviceData) throws InvalidExpressionFault;
GT3 Core介绍 • Configuration API • ServiceProperties Get/Set Property (loaded from deployment descriptor, set by framework or application) Get/Set Persistent Property (for recoverable services) • ContainerConfig Get/Set Option – Global Configuaration
GT3 Core介绍 • ServiceDeployment API API typically used by factories • Deploy/Undeploy transient services • Save/Remove persistent services to/from deployment descriptor
GT3下网格服务开发实例服务开发和部署的基本步骤GT3下网格服务开发实例服务开发和部署的基本步骤 • 提供一个服务接口 • 生成Stub文件 • 实现服务 • 创建部署文件 • 部署服务
GT3下网格服务开发实例 • 提供一个服务接口 1. 用java语言编写一个接口,然后用工具生成WSDL poteType 接口描述文件; 2.编写WSDL portType 接口文件; 这里用第一种方法实现一个例子
GT3下网格服务开发实例 • 接口文件举例: package gt3tutorial.core.first.impl; public interface Math { public int add(int a, int b); public int subtract(int a, int b); public int multiply(int a, int b); public float divide(int a, int b); }
GT3下网格服务开发实例 • 接口文件转换为wsdl 编译生成 .class 文件 用java org.apache.axis.wsdl.Java2WSDL 命令生成WSDL文件 • 修饰WSDL,即将WSDL转换为GSDL 用命令 Java org.globus.ogsa.tools.wsdl.DecorateWSDL
GT3下网格服务开发实例 • 生成Stub文件 用命令生成Stub 文件 java org.globus.ogsa.tools.wsdl.GSDL2Java MathService.wsdl 将会生成若干个java文件
GT3下网格服务开发实例 • 实现服务 package gt3tutorial.core.first.impl; import org.globus.ogsa.impl.ogsi.GridServiceImpl; import gt3tutorial.core.first.Math.MathPortType; import java.rmi.RemoteException; public class MathImpl extends GridServiceImpl implements MathPortType { public MathImpl() { super("Simple Math Service"); } public int add(int a, int b) throws RemoteException { return a + b; } …… }
GT3下网格服务开发实例 • 创建部署文件 • 生成部署描述文件 <?xml version="1.0"?> <deployment name="defaultServerConfig" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="tutorial/core/first/MathService" provider="java:RPC"> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="gt3tutorial.core.first.impl.MathImpl"/> </service> </deployment>
GT3下网格服务开发实例 • 编译源文件,包括用命令生成的java文件和实现服务的java文件 • 对class文件打包 :用jar • 创建GAR包(globus archive 包) • 将Math.wsdd改名为server-deploy.wsdd • Gar包中包含如下文件 Math.jar,Math-stub.jar,server-deploy.wsdd MathService.wsdl
GT3下网格服务开发实例 • 部署服务 ant deploy -Dgar.name =D:\GT3\example\gar\Math.gar • 启动服务 globus-start-container –p 端口号
GT3下网格服务开发实例如何使用服务 • 应用程序实例 package gt3tutorial.core.first.client; import gt3tutorial.core.first.Math.MathServiceLocator; import gt3tutorial.core.first.Math.MathPortType; import java.net.URL; public class MathClient { public static void main(String[] args) { try { // Get command-line arguments int a = Integer.parseInt(args[1]); int b = Integer.parseInt(args[2]); URL GSH = new java.net.URL(args[0]);
GT3下网格服务开发实例如何使用服务 // Get a reference to the remote web service MathServiceLocator mathService = new MathServiceLocator(); MathPortType math = mathService.getMathService(GSH); // Call remote method 'add' int sum = math.add(a,b); // Print result System.out.println(a + " + " + b + " = " + sum); }catch(Exception e) { System.out.println("ERROR!"); e.printStackTrace(); } } }
GT3下网格服务开发实例如何使用服务 • 编译 javac -sourcepath D:\GT3\example\gt3tutorial\core\first\Math D:\GT3\example\gt3tutorial\core\first\client\MathClient.java • 运行 java gt3tutorial.core.first.client.MathClient http://localhost:8080/ogsa/services/tutorial/core/first/MathService 3 2
结束语 • 网格计算技术蓬勃发展 • 万变不离其衷 • 欢迎参与和交流