随笔 - 181, 文章 - 2, 评论 - 85, 引用 - 0
数据加载中……

网格实践: 在 SOA/Web 服务环境中监视和发现网格服务-----使用 Globus Toolkit 4 中的开放源码信息服务

本文将简要介绍 Globus Monitoring 和 Discovery Service(MDS)。本文讨论了构成 MDS 的组件,并介绍了在网格环境中其他服务通常是如何与 MDS 进行交互的。在阅读本文之后,您应该可以配置 Globus MDS 并注册服务,以及 为 MDS 配置其他信息提供者。您将学习如何组织信息并按照 MDS 的层次结构来配置多个 Index Services,从而构成网格的 Index Service。

Globus Monitoring 和 Discovery Service

Globus Monitoring 和 Discovery System(MDS)是一组 Web 服务,用来监视和发现网格中的可用资源和服务。顾名思义,人们通常会认为资源发现的过程就是发现新的资源。然而,在网格环境中,资源发现是确定哪些网格资源最适合完成某个任务的过程,要求时间最短,利用资源的效率最高。这个过程是从识别可以满足或超过当前作业需求的资源开始的。这通常是可用资源的某个子集。

接下来,我们需要通过选择最适合的资源来细化这个清单。这个选择过程需要静态和动态的信息。通常,静态信息(例如 CPU 数量、时钟速度、物理内存总量、虚拟内存以及可用磁盘空间)可以帮助确定哪些资源能够满足或超过任务的需求。在细化这个清单时,也要考虑一些动态信息。动态信息包括可用 CPU 的个数,队列中等待执行的作业个数,当前资源的利用率。现在这已经成为一个调度问题,必须考虑业务策略、优先级和服务级别协定(SLA)。

调度并不是本文的重点,因此让我们保留整个主题改天再来讨论。Globus MDS 提供了有关资源的信息,这样就可以制定智能的调度决策,从而最好且最有效地利用可用资源。MDS 也可以监视资源,在状态发生变化时通知感兴趣的团体,并根据预先定义的条件采取行动。







Index 和 Trigger Service

我们对 MDS 所搜集到的有关资源的状态进行监视。搜集这些信息的 MDS 服务称为 Index Service。MDS Index Service 的工作方式与注册表非常相似。它搜集信息,然后将其作为资源属性发布。它通过一个 Web 服务接口将所搜集的信息提供给客户机。客户机可以向 MDS 查询信息,或者订阅所感兴趣的资源属性,即表明如果这些属性的值发生了变化,它们非常乐于被及时通知。这些信息代表了资源属性的配置和状态。Globus MDS 可以监视资源,并跟踪所选择的资源属性。它可以通知订阅者属性值发生了变化。

这种功能是由另外一个名为 Trigger Service 的 MDS 服务提供的。它与 MDS Index Service 类似,都要从资源中搜集数据,但是它同时还要对所搜集的数据进行监视,这样就可以在数据到达某个极限值时执行某些预定的操作。Trigger Service 的配置就是订阅某些属性,并指定当某个属性值达到某个预定的极限时应该采取什么操作。要采取的操作可以非常复杂,例如当利用率太高时提供更多资源;也可以非常简单,例如通知系统管理员某个文件系统已经满了。MDS Trigger Service 通过 Web 服务提供此功能。客户机使用这个 Web 服务来注册触发器事件。为了进行注册,客户机要提供程序的名字、一个 XPath 查询表达式以及一个值。当 XPath 查询所返回的值等于注册时所提供的值时,就运行这个程序。MDS Trigger Service 通过对所搜集到的信息和在 MDS Trigger Service 注册和配置文件中所指定的条件进行比较,来提供这种功能。


位置 1. Trigger Service 注册和配置文件的位置
												
																		
$GLOBUS_LOCATION/etc/globus_wsrf_mds_trigger/trigger_registration_aggregation.xml

												
										

这个配置文件使用 XPath 查询表达式的格式定义了一些规则。每个规则都有一个当满足该条规则时所要执行的操作,以及该操作重复的频率。下面这个例子实现了触发器规则、相关操作以及频率的语法,这些都是在前面的触发器注册和配置文件中指定的。


清单 1. Trigger Service 注册的例子
												
																		
       <trigger:TriggerRuleType>
          <trigger:matchingRule>//*[local-name()='GLUECE']</trigger:matchingRule>
          <trigger:actionScript>glue-trigger-action.sh</trigger:actionScript>
          <trigger:minimumFiringInterval>600</trigger:minimumFiringInterval>
       </trigger:TriggerRuleType>

												
										







MDS Aggregation Framework

MDS Index 和 Trigger Service 都是在 MDS Aggregation Framework 之上构建的。MDS Aggregation Framework 用来构造搜集和聚集数据的高层服务。这些聚集器服务将从各种资源搜集来的信息汇集到一个集中的位置。这个概念的范围很广,从在某个容器中运行的所有服务的集中注册表,到一个网格范围的 Index Service,这可以通过配置 Index Service 与其他 Index Service 一起来存放内容。Index Service 可以按照一种层次化的方式进行配置,上层可以从底层的 Index Service 中提取信息。上层 Index Service 可以当作是这个层次中的上游资源,底层 Index Service 可以当作是下游资源。Index Service 在这个层次中的位置是在层次配置文件中使用上游和下游服务这两个术语进行定义的。


位置 2. MDS 层次文件的位置
												
																		

$GLOBUS_LOCATION/etc/globus_wsrf_mds_index/hierarchy.xml 

												
										

这个层次文件指定了上游和下游 Index Service 的 URL。下面这个样例声明中包括了主机名、端口和默认的 Index Service 的标识。清单 2 显示了 Globus Toolkit 4 测试环境中上游和下游服务的声明。


清单 2. 上游和下游服务声明的例子
												
																		

     <upstream>https://gt4-primary:8443/wsrf/
     services/DefaultIndexService</upstream>

     ...

     <downstream>https://gt4-secondary:8443/wsrf/
     services/DefaultIndexService</downstream>

												
										







MDS 资源属性

正如前面介绍的,用户可以向 Globus MDS 查询资源的属性。这些资源属性代表了资源的配置和状态。我们可以为永久资源和临时资源维护一些属性。Globus MDS 中的信息通过为资源数据关联一个超时时间来保证其反映最新情况。这个值被称为生命周期。MDS Index Service 中保存的所有服务都有一个相关的生命周期。如果在这个生命周期指定的时间内没有更新,数据就过期了。这种方法可以通过只在相关的资源属性进行更新时维护这些资源的配置和状态,从而对临时资源进行处理。当资源不再可用时,资源属性就不会更新了,这些信息就会超时并被删除。







MDS 资源特性

Globus MDS Index Service 信息是作为一组 Web Services Resource Framework(WSRF)资源属性进行维护的。客户机可以使用 WSRF get-property 和 WS-Notification subscribe 操作来查询信息或在信息发生变化时收到通知。这些信息也可以使用命令行工具 wsrf-get-propertywsrf-query 进行查询。Globus MDS Index Service 通过用 XML 格式提供所请求的信息来对查询进行响应。下面这个例子执行了一个通用的 DefaultIndexService 查询。–a 选项指定可以进行匿名验证,–s 选项指定了服务的 URL,–z 选项定义了验证类型可以是自己、主机或 none。请参阅 清单 3







XPath 查询

查询可能会产生非常大的 XML 文档。XPath 可以用来帮助定位 XML 中的不同部分。下面让我们来看几个例子,以此展示怎样扩充简单查询来搜集更详细的信息。下面这个例子可以通过统计那些属性匹配 FreeCPU 状态的 ComputingElements,来查询空闲 CPU 的个数。


清单 4. 一个查询空闲 CPU 的 wsrf 查询
												
																		
[globust@gt4-test sbin]$ wsrf-query -a -z none -s 
https://127.0.0.1:8443/wsrf/services/DefaultIndexService
 
"count(//*[local-name()='GLUECE']/glue:
ComputingElement/ glue:State/@glue:FreeCPUs)"

2

												
										

利用前面的例子,下面这个查询展示了一个布尔检查,看是否有指定个数的 CPU 可用。请参阅 清单 5







监视服务

我们已经讨论了上面这些物理资源的概念,但是 MDS 还要监视服务的配置和状态信息。MDS Index Service 会搜集有关容器上运行的其他服务的信息。服务指定了在 Aggregation Service 注册信息时,要将哪些信息保存在 MDS 中。我们稍后会讨论 Aggregation Service,但是首先介绍一下服务注册这个主题。

服务可以使用 mds-servicegroup-add 命令进行注册。每个注册后的服务都有一个类似于前面介绍过的生命周期属性的生命周期。如果某个服务的注册项在一段指定的生命周期中没有更新,就会过期。更新生命周期的一种方法是在后台运行 mds-servicegroup-add 命令,这样它就可以持续在 MDS 中更新服务注册项并刷新服务的生命周期了。

MDS Aggregation Service 从所有的已注册服务中搜集信息,并通过一个 Web 服务接口将这些服务信息提供给客户机。Globus Toolkit 发行版本中提供了一个简单的例子来展示如何在 MDS Aggregation Service 中注册服务。这个例子使用了下面这个位置上的服务注册定义文件。


位置 3. MDS 聚集注册文件的位置
												
																		
$GLOBUS_LOCATION/etc/globus_wsrf_mds_
aggregator/example-aggregator-registration.xml

												
										

这个样例聚集文件定义了服务的注册表。每个注册项都定义了一个网格资源、该资源应该注册的服务组以及服务配置参数。这个文件可以与 mds-servicegroup-add 命令一起维护网格资源与 Index Service 之间的注册。这个文件定义了 Index Service 的位置,它被称为默认的 Service Group End Point Reference。


清单 6. Index Service URL 被定义为默认的 Service Group End Point Reference
												
																		
<defaultServiceGroupEPR>
   <wsa:Address>https://gt4-test.tacc.utexas.edu:8443/
   wsrf/services/DefaultIndexService</wsa:Address>
</defaultServiceGroupEPR>

												
										

example-aggregator-registration 文件中包含了 GRAM 和 RFT 服务的样例注册项。在 ServiceGroupRegistrationParameter 块中定义的每个资源都要在 Index Service 中进行注册。 清单 7 显示了一个 GRAM 和 RFT Service 注册项的例子。

MDS Aggregation Service 也可以对外部信息源的信息进行聚合。这些信息源可以代表本地服务可能需要的远程资源。本地服务可以查询 MDS Index Service 来定位远程资源,并确定这些资源的状态。举例来说,下面这个例子就展示了将 Hawkeye 在默认的服务组中注册为一个信息源。Hawkeye 是一个外部信息源的例子。它使用 Condor 技术(例如 ClassAds)来搜集和存储有关 Condor 池中的资源的信息。清单 8 显示了如何注册 Hawkeye,这样就可以通过 Index Service 来使用有关 Condor 的信息了。


清单 8. 聚集服务组的例子
												
																		
<ServiceGroupRegistrationParameters
   xmlns="http://mds.globus.org/servicegroup/client" >
    <RegistrantEPR	`
      xmlns:agg="http://mds.globus.org/aggregator/types"
      xmlns:gram="http://www.globus.org/namespaces/2004/10/gram/job"
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
      <wsa:Address>
          https://gt4-test:8443/wsrf/services/mds/test/subsource/IndexServiceEntry
      </wsa:Address>
      <wsa:ReferenceProperties>
         <gram:ResourceID>Hawkeye</gram:ResourceID>
      </wsa:ReferenceProperties>
   </RegistrantEPR>
   <RefreshIntervalSecs>600</RefreshIntervalSecs>
   <Content xsi:type="agg:AggregatorContent"
      xmlns:agg="http://mds.globus.org/aggregator/types">
      <agg:AggregatorConfig xsi:type="agg:AggregatorConfig">
         <agg:ExecutionPollType>
            <agg:PollIntervalMillis>60000</agg:PollIntervalMillis>
            <agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>
         </agg:ExecutionPollType>
      </agg:AggregatorConfig>
      <agg:AggregatorData/>
   </Content>
</ServiceGroupRegistrationParameters> 

												
										

当服务进行注册时,它们可以提供搜集服务信息的程序名。这个程序称为执行聚集器,在清单 8 中是使用 ProbeName 的形式指定的。MDS Aggregator Service 可以查询资源属性信息,也可以订阅资源属性信息,这样就可以推动后续的更新了。要注册服务,可以使用位置 3 所给出的 example-aggregator-registration 文件作为 mds-servicegroup-add 命令的参数。下面这个例子展示了使用 mds-servicegroup-add 命令来注册默认的 example-aggregator-registration.xml 文件中所定义的服务。–s 参数告诉 MDS 这些服务应该要进行注册。请参阅 清单 9

可以使用 wsrf-query 命令验证服务是否成功注册。下面这个例子显示了一个 ContainerRegistryService 查询,用来获得容器中正在运行的服务的地址。要在另外一个环境中使用这个查询,请替换 URL 的主机名部分。


清单 10. 使用 wsrf-query 命令查询注册表地址的例子
												
																		
wsrf-query -s https://gt4-test.tacc.utexas.edu:8443/wsrf/
services/ContainerRegistryService
 "/*/*/*/*[local-name()='Address']"

												
										







MDS 聚集类型

我们已经介绍过 Web 服务会发布资源属性。一个服务应该注册的最小资源属性集包括服务名、服务的版本号以及这个服务是何时启动的。有些服务(例如 GRAM 或 RFT)会发布其他信息或更详细的信息。MDS 中的信息是使用 3 个聚集器源(Aggregator Source)进行搜集的。这 3 个聚集源是 Query Aggregator、Subscription Aggregator 和 Execution Aggregator。

前面用来展示服务组注册的那个例子就是一个 Execution Aggregator。Query Aggregation Source 会对注册的服务进行挑选来产生信息。Subscription Aggregation Source 订阅服务数据,这样在服务数据值发生变化时,就可以接收到通知。Execution Aggregation Source 运行一个程序来搜集信息。发布资源属性或用来搜集服务数据的程序有时称为信息提供者(Informational Providers)。GRAM 就是一个信息提供者,因为它会发布有关网格资源的 CPU 和内存信息,以及与作业队列和所提交的作业有关的调度器信息。类似地,可靠文件传输服务(RFT)也是一个信息提供者,它发布的是有关传输器和服务器的状态信息。除了这些信息提供者(它们都是 Globus 发行版中的一部分)之外,MDS 还可以与其他外部信息提供者进行集成,例如 Ganglia 和 Hawkeye。

Ganglia 是一个分布式的监视系统,主要用来监视高性能系统,例如集群。Hawkeye 是一个监视系统,它使用 Condor 工具和 ClassAd 机制来收集有关分布式资源的信息。Ganglia 和 Hawkeye 使用 GLUE 模式的 CML 映射来搜集资源信息,并将这些信息发送到一个 GRAM 服务,这些信息将在这个服务中作为资源属性发布。Ganglia 信息包括主机属性,例如主机名、处理器、内存、操作系统以及文件系统,还有负载信息。如果在 gluerp XML 文件中定义并配置了适当的信息提供者,MDS 就可以汇集 Hawkeye 或 Ganglia 的信息。


位置 4. GLUE 资源提供者的位置
												
																		
$GLOBUS_LOCATION/etc/globus_wsrf_mds_
aggregator/example-aggregator-registration.xml

												
										

Globus 默认的配置说明没有信息提供者。要指定 Hawkeye 或 Ganglia 作为信息提供者,请修改 gluerp.xml 文件中的适当项,这个文件位于 Globus 安装目录中的 etc/globus_wsrf_mds/usefulrp 目录中。下面这个例子展示了指定 Hawkeye 作为信息提供者的正确定义。后面的例子将展示如何配置 Ganglia 作为信息提供者。


清单 11. 信息提供者注册项
												
																		
<config xmlns="http://mds.globus.org/2004/10/gluerp-config">
   <defaultProvider>shell /usr/local/globus/globus-4.0.0/
   libexec/globus-mds-cluster-hawkeye </defaultProvider>
</config>

   ...

<config xmlns="http://mds.globus.org/2004/10/gluerp-config">
   <defaultProvider>java org.globus.mds.usefulrp.glue.
   GangliaElementProducer</defaultProvider>
</config>

												
										







webMDS

我们在前面已经看到可以使用 wsrf-query 命令来查询 MDS 信息。实际上,MDS 信息也可以使用 webMDS 进行查看。webMDS 是一个用来查看 MDS 中所包含的资源属性信息的前端。webMDS 是一个 servlet,它可以查询 Globus MDS Index Service,并使用 XSLT 转换对数据进行格式化,从而可以很好地在 Web 浏览器中显示。

Web 管理员可以使用 HTML 表单选项定制 webMDS。他们可以配置不同的插件来搜集数据,并使用 XSLT 转换对这些数据进行格式化,从而创建自己的定制视图。webMDS 可以配置为从 MDS 中的各种源搜集信息,并使用 XSL 转换对这些信息进行过滤。如果 Globus Toolkit 是使用默认配置安装的,那么 webMDS 就可以查询 MDS Index Service,而不用修改任何配置。我们测试环境中使用的 webMDS URL 如清单 12 所示。要在另外的环境中使用 webMDS,请使用您自己的主机名替换其主机名部分,如果您不是在默认端口上运行容器的,还需要修改端口号。


清单 12. webMDS URL
												
																		
http://gt4-test.tacc.utexas.edu:9080/webmds

												
										

可以通过编辑下面的 indexinfo 文件并修改默认的 URL 来改变 webMDS URL :


位置 5. MDS 聚集注册文件的位置
												
																		
$GLOBUS_LOCATION/lib/webmds/conf/indexinfo

												
										

要部署 webMDS,首先为 Globus (GLOBUS_LOCATION) 和 Tomcat (CATALINA_HOME) 设置环境变量,然后使用下面的命令为 Tomcat 创建一个 context 文件:


清单 13. 创建 webMDS context 文件
												
																		
$GLOBUS_LOCATION/lib/webmds/bin/webmds-create-contex-file
  \ $CATALINA_HOME/conf/Catalina/localhost

												
										

在成功运行这个命令创建 context 文件之后,请重新启动 Tomcat,以便使用新的配置信息。重新启动 Tomcat 可以使用下面的命令:


清单 14. 重启 Tomcat 容器
												
																		
$CATALINA_HOME/bin/shutdown.sh
…
$CATALINA_HOME/bin/startup.sh

												
										

重启 Tomcat 容器之后,可以在浏览器的地址栏中键入 webMDS 的 URL(请参阅清单 12)来访问 webMDS。这个 URL 中需要替换上您安装使用的主机名和端口号。注意,这是 Tomcat 中运行 webMDS 的 URL,而不是在 Globus 容器中运行的 MDS 服务的 URL。

这个样例表单是由 Globus 发行版提供的,用来展示 webMDS 的功能。也可以使用模板来创建新的定制请求。

通过 webMDS 来查询 Index Service 可以显示在 Index Service 中注册的资源。每个服务都提供了一种资源类型、惟一标识符和一个链接(指向更详细的信息)。选择资源项可以产生有关资源的详细信息。我们已经介绍过 GRAM 和 RFT 服务都在 Index Service 中进行了注册。图 1 是一个显示与 RFT 服务有关的详细信息的例子。


图 1. RFT 服务的 webMDS 信息
RFT 服务的 webMDS 信息

如果 GRAM 配置用来与资源管理器一起使用,例如 LSF、PBS 或 Condor,那么每个资源都会存在这样一个注册项。

图 2 和图 3 显示了与 LSF 服务有关的详细信息。


图 2. globus-mds-LSF 例子 1
globus-mds-LSF

图 3. globus-mds-LSF 例子 2
LSF 服务组

图 4 显示了与 Condor 服务有关的详细信息。


图 4. globus-mds-condor_cluster 例子
Condor 服务组

webMDS 是 MDS Index Service 的一个简单易用的接口。我们在前面已经展示了 mds-servicegroup-add 命令可以用来在 MDS 中注册服务,聚集源可以配置为对来自服务和外部信息提供者的信息进行汇集。这些信息提供者运行了一个程序来搜集信息,它们都是 Execution Aggregators。这很容易展示,可以手工运行信息提供者,并验证这些信息和格式与通过 webMDS 所提供的信息和格式完全相同。下面这个例子显示了 Hawkeye 信息提供者的情况,这是由清单 8 中下面这一行定义的:

												
														<agg:ProbeName>globus-mds-cluster-hawkeye</agg:ProbeName>

												
										

请参见 清单 15







结束语

我们首先概要介绍了 Globus MDS,然后了解了某些底层服务的详细知识。Index Service 是一个注册表,负责搜集信息并以资源属性的形式来发布这些信息。Trigger Service 使客户机可以订阅资源属性,并在数据达到某个极限值时执行预定义的操作。这些服务都是构建在 Aggregation Service 之上的,后者也可以对来自外部信息源的信息进行聚集。这些信息可以汇集到一个集成的注册表中,称为网格 Index Service。Index Service 以编程方式向客户机提供了资源属性信息,这可以通过 Web 服务、命令行接口或浏览器来接收。

posted on 2006-04-17 04:00 wsdfsdf 阅读(1021) 评论(0)  编辑 收藏 引用 所属分类: 技术文章


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理