IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Grid computing  >

应用Service Domain 技术实现Service网格

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Yih-Shin Tan, Senior Technical Staff Member
Vivekanand Vellanki, IBM资深软件工程师
王守慧, IBM资深软件工程师
Jie Xing, IBM 中国软件开发实验室资深软件工程师
李珉, IBM中国软件开发实验室软件工程师
邹勇, IBM中国软件开发实验室软件工程师
何蕾, IBM 中国软件开发实验室软件工程师

2003 年 12 月 01 日

服务网格(Service Grid) 结合了Web服务技术和网格技术,代表了应用网格的发展方向。本文将介绍IBM的Service Domain技术的体系结构,解释其服务网格的实现原理,最后将提供Service Domain实现服务网格的实例。

前言

一般意义网格的概念在于将不同的网络和包括数据、计算能力、存储等在内的计算资源发展成为无缝整合的计算环境,研究方向更多的集中在科研领域,譬如应用于石油勘探以及生命科学领域的高性能计算网格和存储网格。

然而众多的商业性公司已经注意到网格技术带来的创新潜力和强大功能。网格技术更可以作为一种进化的IT架构来帮助一个公司、组织或行业改进其业务平台来实现应用的网格化(Application grid)。 服务网格(Service Grid) 结合了Web服务技术和网格技术,代表了应用网格的发展方向。

本文将介绍IBM的Service Domain技术的体系结构,解释其服务网格的实现原理,最后将提供Service Domain实现服务网格的实例。





回页首


服务网格

这里提到的服务(Service)是一个广义的概念,包括Web 服务和网格服务。

Web服务是一种流行的企业对企业的应用,它提供了很好的互操作性,改善了传统的分布式系统集成。Web 服务使软件部件的商业化成为可能,非常适合于电子商务应用程序,不同企业可以通过Web服务来连接商务程序。

网格服务是Web服务的扩展,它是符合特定规范(OGSI)的Web 服务。相比一般的Web服务,它加入了服务实例的可控性和服务状态等特性。

随着服务技术的不断发展,不同种类的服务的绑定、共享、整合、协同操作成为系统集成的关键。需要一种智能化的技术,能够提供面向服务的创建、过滤、集簇、组织、定位及选择的机制,即服务的网格化。





回页首


Service Domain

Service Domain 是IBM推出的服务网格(Service Grid)的实现技术。通过通用的服务接入点,聚集相关的Web 服务,采用自主计算的原理来融合Web服务和服务网格。可以利用Service Domain 轻松创建面向服务的网格。Service Domain可以选择合适的服务实例来处理服务请求,监控服务实例的性能。而服务实例的选择不仅可基于服务的可用性,还可以取决于Web 服务水平协议(WSLA)和业务安排的服务质量(QoS)特性。而且IBM作为开放网格体系结构(OGSA)的主要参与者和支持者,在Service Domain技术中遵从了OGSA规范。

Service Domain 通过两层概念:Service Domain 和ODSG来构成完整的面向服务的体系结构。
1)虚拟层的随需应变的服务网格On Demand Service Grid(ODSG)

2)服务层的Service Domain
Service Domain将服务整合虚拟化成网格;而ODSG虚拟化网格,提供了可行的服务运行及维护机制。下面的图1给出了Service Domain的SOA(Service Oriented Architecture)体系结构.


图1. Service Domain的SOA体系结构

ODSG

ODSG 作为服务网格的虚拟表现层,通过将Service Domain和本地服务宿主(Hosting)技术集成在一起,将异构的服务整合在不同的服务组(OGSI portType)中,提供给用户。服务中心(Hub), 为其代理的服务提供单一的对外逻辑接口。而主服务中心(Main Hub)还可以将服务的调用请求转发给附属服务中心 (Sub Hub),构成服务路由的树状结构。下面的图2给出了ODSG的体系结构.


图 2 ODSG 体系结构

ODSG的特点:

  • 分布式的动态服务发布
    具体的服务实例发布在其注册的附属服务中心(Sub Hub),但可以通过主服务中心(Main Hub)调用
  • 公共网格调用入口
    对服务的调用通过统一调用接口发出,由系统自动完成服务实例的匹配、选择和分发
  • 中央运行管理
    系统通过服务使用状况、服务的性能等统计数据来监控系统状态,调整服务选择策略
  • 网格虚拟化
    通过不同的角色,例如服务调用用户,服务提供者,平台管理员,等等虚拟化服务网格平台

Service Domain

Service Domain提供了服务代理的底层部件,它的体系结构通过单一的服务接口实现服务的共享与聚合。每个Service Domain的节点,都是由实现了WSDL中指定接口的对象构成。而且Service Domain对象可以通过通用接口迭代聚集到更高一层的Service Domain上,从而构成复杂的服务网格。下面的图3剖析了Service Domain对象的结构.


图 3 . Service Domain对象的结构剖析

Service Domain的主要特点:

  • 服务的入口
    服务的调用接口通过对外发布的WSDL服务URI地址来实现。相同功能的Web服务注册到统一的接口(portType)下,而统一接口注册到服务中心(Hub)上作为某一类服务的单一调用入口。用户并不是直接调用具体的服务,而是向服务中心(Hub)发出对某一类服务的调用申请,由服务中心按照一定的策略选择当前最合适的服务提供商来为用户提供服务。Service Domain支持广泛的服务调用形式,包括SOAP, WSIF, Grid, Document Style等等。
  • 服务的选择策略
    服务的选择策略(Policy)接口,提供了服务维护的智能化依据。Service Domain依靠一系列规则(Rule)来监控、管理服务实例的调用。譬如,服务级别定义、选择/路由原则、服务映射、业务规定、安全规定、恢复原则等等,都可以控制具体服务的选择调度。
  • 服务的发现/提交机制
    Service Domain通过调用一个内部的调度引擎为来自外部的服务请求提供智能化调度。这个引擎执行服务实例的选择,向所选择的服务实例发出执行请求,并将服务的响应结果返回给用户。整个引擎的处理过程由若干模块完成,有利于用户定制执行过程。例如,用户可以定制自己的失败切换模块,实现特定的切换算法。





回页首


Service Domain应用场景

Service Domain的应用是基于Web服务开发的,用户不再需要花费大量的精力去开发维护应用程序运行的平台,可以集中精力在应用业务本身的开发。调度与管理都可以通过注册服务、配置策略文件等来完成。

应用Service Domain技术实现服务网格的一个典型的例子,是在大学中进行的服务资源网格化。 通常在各大学中都蕴含着丰富的计算资源,和广阔的应用领域。如何将这些服务资源方便地共享出来并在需要的地方方便地获取这些资源是一个实际的需求,Service Domain的设计思想正满足了这种需求。


图4 . Service Domain的应用实例

在上图中,每个学校都可以设立一个服务中心(Sub Hub ), 可以将学校的资源以服务的形式注册到各自的服务中心上。一般的应用可以注册成Web服务,而计算资源可以注册成网格服务。在各大学的内部,通过获取服务中心的服务来使用资源。相同功能的服务注册到统一的接口(portType),由服务中心根据服务当前的负载和定制的调度策略为用户选择最佳的服务提供者。

各学校的服务中心(Sub Hub)还可以注册到一个主控服务中心(Main Hub)上。这样,通过主服务中心(Main Hub),学校的服务资源可以被其他学校识别并使用。例如,几个学校都提供某个课程的服务,服务的调用接口是一样的,但服务的质量诸如响应时间等是不一样的。当用户登录到主服务中心(Main Hub)申请课程服务时,由主服务中心根据用户的级别和当前服务的负载情况选择一个最佳的学校(Sub hub)来为用户提供服务。用户完全不必关心服务来自哪一个节点。





回页首


Service Domain的应用实例

这里,我们提供一个应用Service Domain的完整过程。

安装Service Domain

Service Domain技术与IBM Emerging Technologies Toolkit(ETTK)一起发布在IBM Alphaworks 站点上.从这里可以获得ETTK最新安装程序和安装配置文档:

http://www.alphaworks.ibm.com/tech/ettk,

Service Domain安装完成后,两个标准的Demo服务已经被发布到应用服务器上,下面我们以股票查询服务作为例子说明如何构建服务网格。

注册portType

首先,我们需要在Service Domain(SD)上注册一个服务类别,即"股票查询服务",SD中的服务接口是通过指定WSDL,注册portType来实现的。如:

http://HOSTNAME:PORT/sd/servicedomain/StockQuoteService_Interface.wsdl

以管理员的身份登录到ODSG的管理页面,选择"Create Port Type"


图 5 . 注册名为"StockQuote"的portType

注册服务

服务提供商会根据portType开发Web服务,然后注册。这里我们就不再赘述如何编写Web服务,而直接利用Demo中的样本服务:

$SDDIR/servicedomain/webapp/servicedomain/DummyServiceA_Impl.wsdl
$SDDIR/servicedomain/webapp/servicedomain/DummyServiceB_Impl.wsdl
... ...


图 6 . 注册服务1,设定较高的服务级别"PREMIER",URL: DummyServiceA_Impl.wsdl

用同样的方法注册服务2,设定服务级别为较低的"TRIAL", URL为DummyServiceB_Impl.wsdl

预订服务

首先,定义一个Offering,在Offering中指定需要分配给用户的服务接口(portType). 创建Offering的目的在于可以把多个服务包装在一起,提供统一的QoS管理,并一次授权给用户。


图 7 . 创建名为qt的Offering,其中包括"StockQuote"portType, 并设Qos为"BEST"

用同样的方法创建名为qt2的Offering,其中包括"StockQuote"portType, 并设Qos为"GOOD"

这一步我们创建了两个Offering, 它们实际把同一类服务(portType)按照服务质量划分为两类。一类提供最好的服务(BEST), 另一类提供好的服务(GOOD)。下面我们把服务预订给两组用户。


图 8 . 将Offering qt 预定给"金牌"用户组

用同样的方法将Offering qt2 预定给"铜牌"用户组。这里,我们已经设定"金牌"用户组(gold_users)对"StockQuote"类服务享有最好(BEST)服务,而"铜牌"用户组(bronze_users)对"StockQuote"类服务享有好(GOOD)服务。

调用服务

我们先来看一下,用户如何调用ServiceDomain上注册的服务。下面是调用股票查询类服务的JSP文件。

清单 1 . 调用服务的JSP文件 - StockQuote.jsp片断

.........
<%@page import="sdclients.tasks.*,java.util.*" %>
<%@page session="true" %>
<%
InvocationTask task = new InvocationTask(session); //创建接口类
 task.setOperation("getQuoteDescriptive"); //设置调用服务的方法名
 task.setPortType("StockQuote"); //设置服务的类名(portType名)
%>
.........
<% 
task.setArgs(new Object[] { symbol });//设置需要传给服务的参数
quote = (String)task.invoke();//调用服务,取得结果
%>
.........


Web服务的调用通过Service Domain的接口类"InvocationTask"来完成,仅仅指定了portType的名字,以及Web 服务的方法名,并不知道Web服务实现的具体位置。Web服务的调用是由Service Domain来自动定位完成的。

下面我们以不同的用户登录,调用股票查询服务。"gold"用户属于"gold_users"用户组,而"bronze" 用户属于"bronze_users"用户组。


图9 . 以用户"gold"登录, 调用"StockQuote"服务后返回的结果。

服务返回的信息,"Stock value of XXX is 10.0 Courtesy: StockQuote supplier A",说明实际调用的服务是来自supplier A。

如果用户"bronze"调用"StockQuote"服务,返回的信息将是,"Stock value of XXX is 10.0 Courtesy: StockQuote supplier B",说明实际调用的服务是来自supplier B。

上述例子的调用过程说明了Service Domain实现服务网格的思想:

  1. 所有的用户不需要关心服务来自哪里,以代表一类服务的portType作为入口,由Service Domain去实现服务的调度。上面的例子中,看起来两个用户都访问了相同的服务,实际上他们只是从同一个入口进入,而服务却是由不同的服务提供者提供的。
  2. Service Domain的服务选择是可以配置的,回顾上面的例子,两个服务提供商提供了不同的服务质量,即"最好"和"好"。接着我们把这两种服务授权给不同的用户组,"金牌"用户得到了"最好"的服务,而"铜牌"用户只得到"好"的服务。
  3. Service Domain中的监控服务会跟踪并动态修改服务的质量级别,服务质量(QoS)度量参数包括:服务的调用成功率,最大负载,响应超时次数和平均响应时间等。用户也可以自行定制需要监控的参数,并插入相应的监控和调度部件。



参考资料



作者简介

Senior Technical Staff Member 他的专长是基于Web的系统软件架构,分析,设计和开发,是IBM WebSphere Platform System House Advanced Design and Development组织的领导架构师,Service Domain技术和概念的创始人。


IBM资深软件工程师,专长于Web服务、网格计算及自主计算等领域的研究。


资深软件工程师,在IBM中国软件开发实验室领导Service Domain的开发与测试工作和客户解决方案设计,对Web Service及Grid Service架构有深入的理解。


IBM资深软件工程师,从事Web服务、网格计算领域的高技术研究工作。对分布式计算及工作流系统有深入研究。


IBM中国软件开发实验室软件工程师,从事Service Domain的开发与测试工作,对Web Service和Grid Service的开发与测试有较丰富的经验。


IBM中国软件开发实验室软件工程师,从事Service Domain测试与推广工作,有丰富的测试经验,尤其是对Web service性能测试。


IBM中国软件开发实验室软件工程师,从事Service Domain相关测试工作,对异构Web Service开发与测试有较丰富的经验。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款