如何在网格中实现SOA和Web服务

日期: 2010-03-03 来源:TechTarget中国 英文

  保持与Globus Toolkit的同步更新对于维持最新的网格技巧来说非常重要。本文将介绍Globus Toolkit的版本4,在Service-Oriented Architecture(SOA)和Web服务领域中展示这个工具包,并详细介绍Grid Resource Allocation Manager组件(GRAM),以及为网格作业提交、监视和控制例子创造条件的支持服务。

  在本文中,我将在Service-Oriented Architecture(SOA)和Web服务领域概要介绍Globus Toolkit 4的内容。重点介绍这个工具包中的Grid Resource Allocation Manager(GRAM)组件(以及支持服务)——这是一组核心服务,可以帮助您在特定的资源上启动作业、检查状态并获取结果的实际操作。通过这个重点的介绍,我们将设置提交网格作业的一个例子中的步骤。网格作业的例子开始是以一个非常基本的例子形式出现的,然后逐渐向其中引入一些新的概念和特性,以支持更加复杂的作业——最后通过Globus GRAM 将多个作业提交给调度器。

  不过首先让我们来讨论一下有关SOA和网格的问题。

  SOA和网格

  SOA是最近的一个热点问题。尽管这个概念已经并不新鲜,但是它却重新点燃了 Web 服务的活力。Web 服务可以通过一个使用标准协议仔细进行定义的接口为远程用户提供对程序的访问。高级的服务可以在现有的服务之上进行构建,应用程序可以通过将一系列 Web 服务连接在一起而进行开发。最后,我们还有一个非常有用的重用方法。

  如果应用程序提供了一个通用的可重用服务,并且它是无状态的,需要少量的输入和输出数据,那么这个应用程序就应该打包为一个Web服务。为了增加重用性,甚至还有一种发现并调用现有服务的机制。这种方法对于在分布式环境中提供对常用应用程序的访问来说非常有效,因为它是基于标准协议的,例如SOAP over HTTP。

在将SOA应用到网格实现上时,有一些常见的应用程序应该以 Web 服务的形式提供。然而,很多常见的应用程序都是特定于网格实现类型的,无论研究、科学方面的网格,还是教育网格。如果我们希望在这些应用程序域之间使用一些可重用的服务,那么应该区分任何网格实现中所需要的服务:

  • 安全性

  • 执行管理

  • 通知

  • 复制

  • 资源发现

  • 监视

  如果我们将网格实现中所需要的服务进行合并,就会得到一个基本的网格基础设施,我们称之为“面向服务的基础设施”(Service-Oriented Infrastructure)。

  GRAM功能和服务

  这种环境中的Web服务为支持通用的作业提交方法提供了一个基础,当您希望在相关的输入数据之间提供可执行文件时,可能要在产生输出数据的同时访问这些数据,然后在执行过程中与作业进行交互,此时这种方法非常有效。这看起来可能有些超前,但是现在的确已经有了提供这种功能的工具和技术。

  Globus Toolkit 4.0就是这样一种工具。它对一组Web服务进行了打包,这些服务为我们提供了一个面向服务的基础设施。应用程序关注的是某个具体的问题领域,而 Globus Toolkit 关注的则是整个基础设施。Globus Web服务可以帮助您对分布式基础设施组件进行访问和管理。

  Globus Toolkit的GRAM组件提供了一组Web服务,它们采用了WS-Resource Framework,其设计目标是帮助您在网格环境中提交作业和管理作业。GRAM可以用于那些需要信任证书、可靠执行以及协调文件步骤的作业。GRAM可以帮助实现信任证书的管理,从而提交作业,监视作业的进展状况,控制作业的执行情况,并分阶段地处理相关的数据。不同的信任证书可以用来代表不同的功能。GRAM提供了一个可靠的执行环境,并集成了多个专门用来在复杂环境中对作业执行管理进行优化的调度器。GRAM和支持服务提供了文件分段传输的功能,甚至还提供了在作业运行时访问输出数据文件的功能,从而有效地实现对输出数据的利用。

    GRAM调度器

  当您提交一个作业时,GRAM创建一个ManagedJob对象,并返回其句柄。然后您就可以使用这个句柄与这个作业进行交互,这实际上是一个 WS-Addressing Endpoint Reference(EPR)。稍后我们将讨论一个典型的交互过程,并给出几个例子;但是首先让我们来了解一下支持作业执行所使用的基础设施。

  网格作业可能会消耗大量的计算周期,因此一个网格环境通常会包含很多资源集群。这些集群通常是由一个调度器进行控制的。调度器负责对资源的使用进行优化,从而按照定义好的策略来有效地执行作业。有很多调度器可以使用,其中包括Load Sharing Facility、Condor 和 Portable Batch System。

  GRAM使用调度器适配器将作业描述语法转换成调度器可以执行的命令。除了为调度器提供一个接口之外,GRAM还包含了一种派生新的 UNIX® 进程来启动作业的机制。这适用于小型的串行作业,它们在运行时不需要集群资源,也不需要共享内存或消息传递。在后面的例子中,我们就会使用这个简单的派生进程。

  派生进程使用一个 Fork Starter 程序来启动并监视针对GRAM的作业进程。它还记录了一些数据,例如启动时间、结束时间以及该作业的退出代码。当提交作业时,事件会被写入日志文件中。当有重要的事件发生时,会继续在后面添加日志。这些调度器日志文件是由称为 Scheduler Event Generator(SEG)的进程进行监视的,它会让GRAM通过监听相关的事件并与其通信,来保持与作业状态的同步。

  GRAM支持服务

  GRAM提供了作业和执行管理服务来提交、监视和控制作业,但是这都依赖于用来传输文件和管理证书所使用的支持服务。GridFTP所提供的文件服务用来帮助GRAM实现对输入和输出文件的分段传输。证书管理服务处理证书对其他服务和所需要的分布式网格资源的委托。

  GRAM作业提交

  现在我们已经基本了解了这些功能和支持服务,接下来让我们讨论一下实际的作业提交系统。

  作业提交的基础知识

  可以使用应用程序编程接口(API)或者通过命令行工具,以编程的方式提交作业。命令行工具是用来测试 Globus 安装的一种简单方法,因此我们首先介绍一下这种方法。

  globusrun-ws命令行工具取代了managed-job-globusrun命令,它用来提交、监视和控制作业。它可以协调文件的分段传输、证书委托和身份验证问题。信息可以使用命令行选项进行指定,也可以包含在一个基于 XML 的对象描述文件中。globusrun-ws命令是同步执行的,因此作业在提交时并不会返回控制权。相反,它会通过显示作业的状态,以交互方式提供一些反馈。基于这些状态信息,您可以选择使用Ctrl C来取消某个作业。

  作业提交的前提条件

  所有的用户都必须通过身份验证并具有有效的证书才可以提交作业。这个作业可能需要将证书委托给他人来执行远程操作,例如分段传输文件。

  下面的例子假设已经使用 grid-proxy-init 命令生成了一个有效的代理。然而,证书也可以通过作业请求进行传输,或者上传到Delegation服务中。清单 1 是提交一个简单作业(用来获取日期)的例子。-c 选项指定要运行/bin/date命令。

  清单 1. 提交作业来获取日期

以下是引用片段:
[globust@gt4-test ~]$ grid-proxy-init
Your identity: /C=US/O=UTAustin/OU=TACC/CN=Globus User/UID=globust
Enter GRID pass phrase for this identity:
Creating proxy ………………………………………. Done
Your proxy is valid until: Thu May 19 23:35:47 2005
  
[globust@gt4-test ~]$ globusrun-ws -submit -c /bin/date
Submitting job…Done.
Job ID: uuid:254e353e-c884-11d9-9304-0011435a15ac
Termination time: 05/20/2005 16:36 GMT
Current job state: Active
Current job state: CleanUp
Current job state: Done
Destroying job…Done.

  作业描述文件

  在命令行中指定多个作业参数可能会是一件令人讨厌的事情。当有多个参数与一个作业相关时,可以使用作业描述文件。

  作业是使用-f选项提交的,后面跟着作业描述文件名。在作业描述文件中可以使用变量。在提交作业时,GRAM会处理作业描述文件,并替换变量的值。

  在下面这个例子中,变量GLOBUS_USER_HOME对应我的主目录。这个变量会被替换成解析后的值,这是到主目录的实际路径。在清单2中,我们提交了一个使用提交描述文件simple_test.xml描述的作业。这个作业使用echo命令将输入参数重定向到标准输出上。在这里,我们规定,应该将标准输出重定向到主目录中的stdout文件。

  清单 2. 使用作业描述文件

以下是引用片段:
globust@gt4-test ~]$ globusrun-ws -submit -f simple_test.xml
Submitting job…Done.
Job ID: uuid:db96c126-c884-11d9-8a94-0011435a15ac
Termination time: 05/20/2005 16:41 GMT
Current job state: Active
Current job state: CleanUp
Current job state: Done
Destroying job…Done.
  
[globust@gt4-test ~]$ cat simple_test.xml
<job>
  <executable>/bin/echo</executable>
  <argument>Wow, we’re submitting Grid Jobs!</argument>
  <stdout>${GLOBUS_USER_HOME}/stdout</stdout>
  <stderr>${GLOBUS_USER_HOME}/stderr</stderr>
</job>

  批处理模式

  除了同步模式之外,globusrun-ws命令还可以使用批处理模式来提交后台作业。

  要使用批处理模式,则需要指定一个文件,其中GRAM应该将Job EPR保存到所管理的作业资源中,然后在与这个作业相关的一系列命令中指定这个文件。

在这个例子中,我们将提交与上一个例子相同的作业,但是我们使用-batch选项指定它应该在后台运行。控制权会立即返回,因此您可以在这个作业运行的同时执行其他工作。后台作业的状态可以使用globusrun-ws命令的-status参数进行查询,并指定-job-epr-file,该参数可以确定与这个作业相关的ManagedJob对象。

  清单 3. 在后台运行清单 2 中的作业

以下是引用片段:
globust@gt4-test ~]$ globusrun-ws -submit -batch -f simple_test.xml -o st.epr
Submitting job…Done.
Job ID: uuid:db96c126-c884-11d9-8a94-0011435a15ac
Termination time: 05/20/2005 16:41 GMT
Current job state: Active
Current job state: CleanUp
Current job state: Done
Destroying job…Done.
  
[globust@gt4-test ~]$ globusrun-ws -status -job-epr-file st.epr
Submitting job…Done.

  作业变量

  您可以在作业描述文件中为这个作业设置环境变量,并通过指定一个count参数来控制该作业运行的次数。在下面这个例子中,环境变量CONDOR_CONFIG已经设置,以指定condor配置文件的位置;count变量说明这个作业应该运行25次。

  清单 4. 确定一个作业运行多少次

以下是引用片段:
  <environment>
    <name>CONDOR_CONFIG</name>
    <value>/usr/local/condor/condor-6.7.7/etc/condor_config</value>
  </environment>
  
  …
  <count>25</count>

  文件分段传输

  作业描述符文件可以包括文件传输指令,它控制输入和输出文件的分段传输。这些指令使用了Reliable FileTransfer(RFT)语法,在指定源URL和目的URL时可以支持第三方的文件传输。


  RFT服务是通过GRAM调用来分段传输输入文件和输出文件的。RFT类似于一个GridFTP客户端,通过持续进行传输来管理数据的传输和状态信息。它通过支持检查点和为崩溃的文件传输提供重启功能而增强了可靠性。

  除了要对输入和输出文件进行分段传输之外,GridFTP还可以用来在作业执行期间对输出文件进行监视。GridFTP可以检查输出文件的状态,并传输任何新信息,从而有效地处理输出数据。

  清单 5 给出了文件分段传输指令,它用来从一个远程机器gt4-test1上获取一个文件,并将其复制到/tmp/simpleTestFile中的本地文件系统中。

  清单 5. 文件分段传输指令

以下是引用片段:
<fileStageIn>
   <transfer>
     <sourceUrl>gsiftp://gt4-test1:2811/tmp/simpleTestFile</sourceUrl>
     <destinationUrl>file:////tmp/simpleTestFile</destinationUrl>
   </transfer>
</fileStageIn>

  除了对文件进行分段传输之外,还可以使用 <fileCleanUp> 指令自动删除文件,如清单 6 所示:

  清单 6. 自动清除文件

以下是引用片段:
<job>
   <fileCleanUp>
    <deletion>
      <file>file:////tmp/simpleTestFile</file>
    </deletion>
  </fileCleanUp>
</job>

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • API开发与管理大作战

    2014将会是API管理方法新旧PK的一年,据Delyn Simons说,她领导了Mashery开发者的外展团队。应用编程接口(API)的主流化和私有化在新的一年也将掀起波澜,她在波士顿“Future Insights Ultimate Developer Event 2013”大会上预测说。

  • 公共API外包管理是否值得考虑?

    公共API外包管理是指聘请一个专家小组来解决可扩展性问题,同时也提出几套可替代的方案。

  • 最适合大数据应用的是SOA还是REST?

    跟所有的企业数据一样,大数据唯有通过应用投射给用户才有用。对于设计或重新设计大数据应用的架构师来说,一个关键问题是究竟是用SOA还是RESTful的API?

  • 弹性资源对传统的REST架构构成挑战了吗?

    组件化应用程序需要机制来将组件传递到下一个工作地。从一开始,人们对连接流程及其实施就有不同的观点。可以证明,SOA阵营是由RPC和SOAP的软件接口发展而形成的。