跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

使用 Globus Toolkit 监控和发现服务查询网格

了解如何编写 Java 查询实现

Vladimir Silva, 软件工程师
Vladimir Silva 出生在厄瓜多尔的基多。他于 1994 年从陆军工学院(Polytechnic Institute of the Army)获得系统分析员(System's Analyst)学位。同年,他作为交换学生来到美国,在中田纳西州立大学(Middle Tennessee State University)学习计算机科学。毕业后,他加入了 IBM“Web-Ahead”技术智囊团。他的兴趣包括网格计算、神经网络和人工智能。他还拥有包括 OCP、MCSD 和 MCP 在内的众多 IT 证书。可以通过 vsilva@us.ibm.com与 Vladimir 联系。

简介: 在计算网格中,信息是重要的资源,因此收集信息是一个至关重要的活动。Globus Toolkit 的信息服务组件 - 监控和发现服务(Monitoring and Discovery Service,MDS)- 通过网格资源信息服务(Grid Resource Information Service,GRIS)和网格索引信息服务(Grid Index Information Service,GIIS)收集有关网格资源的信息。在本文中,作者 Vladimir Silva 向您说明了如何开始轻松地实现一个 Java 类,以用于在网格中查询信息。

发布日期: 2003 年 5 月 01 日
级别: 初级
访问情况 : 730 次浏览
评论: 


简介


Globus Toolkit 的监控和发现服务(MDS)组件使用了一个可扩展的框架来管理有关计算网格及其所有组件(网络、计算机节点、存储系统和工具)状态的静态和动态信息。MDS 的优点包括:

  • 访问有关系统组件的静态和动态信息
  • 统一灵活地访问信息
  • 访问多个信息源
  • 异构动态环境中进行配置和调整的基础
  • 分散维护

可以使用 MDS 来回答下列有关网格状态的问题:

  • 什么资源是可用的
  • 计算网格的状态是什么?
  • 如何根据底层系统的配置来优化应用程序?

MDS 使用轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)作为访问该信息的接口。但是,您可以使用许多商用或开放源码软件组件来实现 MDS 的基本功能,这些功能包括如下:

  • 建立到 MDS 服务器的连接
  • 在 MDS 中查询内容
  • 显示查询结果并断开与服务器的连接

MDS 提供了发现网格中机器、计算机和网络特性的方法,这些特性包括当时可用的处理器数目、提供的带宽和存储器类型(磁带或磁盘)。通过使用 LDAP 服务器,MDS 在公共接口中提供了中间件信息,从而将统一的图象放在全异资源的顶部。


使用 MDS 组件:GRIS 和 GIIS


网格资源信息服务(GRIS)提供了在计算网格上查询资源以获取其当前的配置、功能和状态的统一方法。GRIS 是一种分布式信息服务,通过将查询定向到作为 Globus 服务一部分部署在网格资源上的信息提供程序,从而可以回答有关某一特定资源的查询。该服务所提供的信息示例包括主机身份(操作系统和版本)以及更多的动态信息(CPU 和内存可用性)。

网格索引信息服务(GIIS)组合了任意 GRIS 服务,来为网格应用程序提供浏览和搜索功能。在计算网格的一致映象(coherent image)中,GIIS 提供了标识特别重要的资源(比如计算资源、存储器、数据和网络的可用性)的方法。


使用 Java 类查询 MDS 组件


Java 商品网格(Java Commodity Grid,CoG)工具箱提供了可以用来在网格上查询 GRIS 和 GIIS 服务的工具。这些类位于 org.globus.mds 包(请参阅 参考资料)中。也可以查看下面的清单 1。


清单 1. 一个查询 MDS 的 Java 类

package com.ibm.globus.services.mds;

import org.globus.mds.*;
import java.util.Hashtable;
import java.util.Enumeration;

/**
 * A Java Class to query information from the Globus MDS service
 */

public class MDSService {
  // Default MDS server parameters. Change to fit your Global MDS server 
  values
  private final String _MDS_SERVER = "global-pool-giis.intragrid.ibm.com";
  private final String _MDS_BASE_DN = "Mds-Vo-name=POOL-CONTACT,o=grid";

  // Our Grid uses port 2135. Default globus MDS port is 391
  private final String _MDS_PORT = "2135";
  private MDS _mds = null;
  
  /**
  * Constructors
  * @param _MDS_SERVER LDAP Host
  * @param _MDS_PORT LDAP port
  * @param _MDS_BASE_DN LDAP search Dn (Distinguished name)
  */
  
  public MDSService() {
    _mds = new MDS(_MDS_SERVER, _MDS_PORT, _MDS_BASE_DN);
  }
  public MDSService(String host, String port, String baseDN) {
    _mds = new MDS(host, port, baseDN);
  }


org.globus.mds 包支持连接到 MDS 服务器、查询内容、打印查询结果并断开与该服务器的连接。它提供了一个中间应用层,您可以轻松地适应不同的 LDAP 客户机库,比如 JNDI、Netscape SDK 和 Microsoft SDK。当前的发行版基于 JNDI。


调用 MDS 构造函数


使用该 Java 类的第一步就是通过发出下面这行代码来建立连接(即调用 MDS 构造函数): MDS mds = new MDS("www.globus.org", "389", "o=Globus, c=US") ;这个类的参数有:MDS 服务器的名称、端口号(缺省情况下为 389)和专有名称或基本目录。LDAP 查询在基本目录(DN)上进行搜索。缺省值为 o=Globus, c=US

:网格可以使用另一种设置。下面的清单 2 显示了搜索代码。

清单 2:搜索 MDS

                    
  /**
  * This method performs the actual MDS search.
  * @param filter search filter to be used. Ex: (objectClass=*)
  */
  
  public String HostInfoLookup(String filter) {
  try {
    // Attributes to be returned by the search
    String[] attribs = null;
    _mds.connect();

    // The MDS pkg returns a Multi-valued hashtable
    Hashtable t = _mds.search(filter, attribs, _mds.SUBTREE_SCOPE);
    _mds.disconnect();
    return "<mds>\n" + buildStatusXML(false, this.getClass() 
    + "HostLookup","ok") + 
      "\n<data>\n" + ht2XML(t) + "</data>\n</mds>";
  }
  catch (Exception ex) {
    ex.printStackTrace();
    return "<mds>" + buildStatusXML(true, this.getClass().getName(), 
    ex.getMessage()) + "</mds>";
  }
}
  
          
  /*
  * Return xml is composed by a status tag
  */
  
  private String buildStatusXML(boolean bError, String source, String desc){
  String XML = "<status>\n\t" +
    "<error>" + bError + "</error>\n\t<source>" + source 
    + "</source>\n\t" +
    "<desc>" + desc + "</desc>\n</status>";
  return XML;
}
  
          
  /**
  * Convert an MDS Search HashTable (Multi-valued) to XML
  */
  
  private String ht2XML(Hashtable t) throws Exception  {
    Enumeration e = t.elements();
    MDSResult mvRecord = null; // result is a multi-val hash table
    String dn = "";                     // ht key is a dn
    StringBuffer xml = new StringBuffer();

    // sweep HT keys translating to XML
    for (Enumeration dnEnum = t.keys() ; dnEnum.hasMoreElements() ; ){
      mvRecord = (MDSResult)e.nextElement();
      dn = (String)dnEnum.nextElement();

      if ( mvRecord.size() > 0 ) {
        xml.append("\t<record dn=\"" 
        + dn.replace('"',' ').trim()
         + "\">\n\t");
        Enumeration recKeys = mvRecord.keys();
        String sKey = "";
        for (int i = 0; i < mvRecord.size(); i++) {
          sKey = (String)recKeys.nextElement();
          xml.append("\t<" + sKey + ">" 
          + mvRecord.getValueAt(sKey,0) 
          + "</" + sKey + ">\n\t");
        }
        xml.append("</record>\n");
      }
    }
    return xml.toString();
  }

        


打开连接并搜索 MDS 服务器


调用 MDS 构造函数之后,搜索之前的下一步通过使用 MDS 类的 connect() 方法打开连接。

然后可以准备用如下调用进行搜索:

result = mds.search("(=*)", MDS.ONELEVEL_SCOPE);

在清单 2 中,有一个参数指定使用哪个过滤器。 (objectClass=*) 过滤器想获取所有数据。另一个参数指定搜索范围( ONELEVEL 搜索当前的 DN 层,而 SUBTREE 则向下搜索目录结构)。


将搜索结果转换成 XML 字符串


MDS 类的 search() 方法的结果是一个用 MDSResult 类包装的类型为 org.globus.common.MVHashtable 的散列表。它基本上是一个多值散列表。

清单 2 中的 ht2XML() 方法显示了如何将 MDS 的结果从散列表转换成其它进程可以轻松理解或处理的 XML 字符串。

下面的清单 3 显示了如何发出针对 GRIS 和 GIIS 的查询。


清单 3:对网格上的 MDS 机器运行查询
                
  /**
  *
  */
  
  public static void main(String[] args) {
    String baseDN = "Mds-Vo-name=AKgrid,o=grid";
    String host = "mdev1.raleigh.ibm.com";

    // Querying a GRIS machine with our grid
    MDSService mds = new MDSService(host,"2135", baseDN);
    String xml = mds.HostInfoLookup("(objectclass=*)");
    System.out.println("GRIS output\n" + xml);

    // Querying the global GIIS of our grid
    MDSService mds1 = new MDSService();
    mds1.HostInfoLookup("(objectclass=*)");
    System.out.println("GIIS output\n" + xml);
  }
}

      

host 的值和 baseDN 的值决定了是对 GRIS 运行查询还是对 GIIS 运行查询。org.globus.mds 包提供了几个构造函数来操作这些参数。但是,在 IBM 实验室中实现的网格使用了不同于 Globus 缺省值的其它值。


查看输出


运行 MDS Java 类显示了清单 4 中的输出。

清单 4:样本程序输出



MDS output
<mds>
<status>
  <error>false</error>
  <source>class com.ibm.globus.services.mds.MDSServiceHostLookup</source>  <desc>ok</desc>
</status>
<data>
  <record dn="Mds-Device-name=/usr,Mds-Device-Group-name=filesystems,
  Mds-Host-hn=mdev1.raleigh.ibm.com , Mds-Vo-name=AKgrid,o=grid">
    <objectClass>MdsDevice</objectClass>
    <Mds-Device-name>/usr</Mds-Device-name>
    <Mds-keepto>20030212112509Z</Mds-keepto>
    <Mds-validto>20030212112509Z</Mds-validto>
    <Mds-Fs-freeMB>15592</Mds-Fs-freeMB>
    <Mds-validfrom>20030212111009Z</Mds-validfrom>
    <Mds-Fs-sizeMB>17078</Mds-Fs-sizeMB>
    <Mds-Fs-mount>/usr</Mds-Fs-mount>
  </record>
  <record dn="Mds-Device-name=eth0,Mds-Device-Group-name=networks,
  Mds-Host-hn=mdev6.raleigh.ibm.com, Mds-Vo-name=AKgrid,o=grid">
    <objectClass>MdsDevice</objectClass>
    <Mds-Device-name>eth0</Mds-Device-name>
    <Mds-Net-addr>10.30.10.15</Mds-Net-addr>
    <Mds-keepto>20030212151853Z</Mds-keepto>
    <Mds-Net-netaddr>10.30.0.0/16</Mds-Net-netaddr>
    <Mds-validto>20030212151853Z</Mds-validto>
    <Mds-Net-name>eth0</Mds-Net-name>
   <Mds-validfrom>20030212150353Z</Mds-validfrom>
  </record>
</data>
</mds>

GIIS output
<mds>
<status>
  <error>false</error>
  <source>class com.ibm.globus.services.mds.MDSServiceHostLookup</source>
  <desc>ok</desc>
</status>
<data>
  <record dn="Pool-info=ISE Server System Grid Computing - hyperion, 
  Mds-Vo-name=POOL-CONTACT,o=grid">
    <intraGrid-Pool-name>ISE Server System Grid Computing - hyperion
    </intraGrid-Pool-name>
    <Mds-Host-hn>hyperion.fscjapan.ibm.com</Mds-Host-hn>
    <objectClass>intraGrid</objectClass>
    <intraGrid-Pool-administrator>trent@jp.ibm.com
    </intraGrid-Pool-administrator>
    <Mds-Vo-name>ISE Server System Grid Computing - hyperion</Mds-Vo-name>
    <Mds-Service-Ldap-suffix>Mds-Vo-name=ISE Server System Grid Computing - 
    hyperion, o=grid</Mds-Service-Ldap-suffix>
    <intraGrid-Pool-localGIIS>hyperion.fscjapan.ibm.com
    </intraGrid-Pool-localGIIS>
    <Mds-Service-port>2135</Mds-Service-port>
    <intraGrid-Geo-location>CHIBA CITY-CHIBA, 12, Japan (140.11,35.59)
    </intraGrid-Geo-location>
  </record>
</data>
</mds>

这个输出提供了大量有关机器、网络、文件系统和资源池的信息以及用于标识特别重要的资源的机制。由于 MDS 构建在 LDAP 协议上,所以可以使用任何 LDAP 浏览工具来浏览网格上的机器。


结束语


Globus Toolkit MDS 提供了一种组合服务以提供粘结系统映象的方法,网格应用程序可以浏览或搜索该系统映象。可以从简单地实现用于在网格中查询信息的 Java 类入手。


参考资料

关于作者

Vladimir Silva 出生在厄瓜多尔的基多。他于 1994 年从陆军工学院(Polytechnic Institute of the Army)获得系统分析员(System's Analyst)学位。同年,他作为交换学生来到美国,在中田纳西州立大学(Middle Tennessee State University)学习计算机科学。毕业后,他加入了 IBM“Web-Ahead”技术智囊团。他的兴趣包括网格计算、神经网络和人工智能。他还拥有包括 OCP、MCSD 和 MCP 在内的众多 IT 证书。可以通过 vsilva@us.ibm.com与 Vladimir 联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Grid computing
ArticleID=21329
ArticleTitle=使用 Globus Toolkit 监控和发现服务查询网格
publish-date=05012003
author1-email=vsilva@us.ibm.com
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。