在过去的几个月,我们与分析师讨论了许多有关云计算的话题。有趣的事是分析师观察云计算的观点。一些分析师把重点放在网络方面,其它分析师把重点放在定价和差异化方面,一些分析师甚至把重点放在了云计算对于应用程序的意义方面。据说机构将利用云计算作为部署应用程序的手段。
Gartner的Daryl Plummer就是一位这样的分析师。他一直是以应用程序为重点的,因为与他谈话和阅读他的博客一直是很愉快的。我们上一次与Daryl谈话的时候他提出了这样的问题“你们能帮一个机构把独立的应用程序迁移到”云”中?”对于F5公司来说,这个答案是很简单的,除非你具体规定这个机构要把工作量迁移到云计算中,而不是整个应用程序。
SOA归来
这里的问题是工作量与一个应用程序不是一回事。工作量相当于一个业务流程编排中的一项活动,而不是整个流程。整个流程与应用程序更接近一些。
工作量是完备的应用程序逻辑的一个单独的构件,本身就可以执行。用结构化语言,我们可以把编码为一项功能;用面向对象的语言,我们可能把它当作一种方法;在SOA领域,我们可以把它叫做Web服务。
这是正确的,朋友们。SOA已经复活了并且正在踏上回归的旅程。
应用程序似乎总是有一两项计算密集型的“功能”。这些应用程序的大部分都需要更多的处理过程,因为它们在数学上是很复杂的,或者需要很多分析,或者包括处理大量的数据集。无论是哪一种原因,运行这些工作量都是很昂贵的。
这个想法是,这些工作量能够有效地卸载到云计算。这些工作量通常是需要每天晚上或者每一个星期执行一次的。这些应用程序并不是一直运行的,当它们运行的时候,其它应用程序都无法运行,因为这些应用程序消耗资源的速度比房价下跌的速度还要快。
但是,你不能把这个工作量从一个单独的应用程序中挑出来。云计算并不是设计用来把单独的应用程序分解为复合的流程的。云计算只要是运行应用程序的。两者是不同的。
为了把工作量迁移到”云”中,你必须要把工作量与应用程序分开。你必须使用与SOA有关的基本原则,把应用程序分解为复合的流程,这样,你就能够最有效地利用手头的处理能力发布这些流程,无论这些处理能力是本地的还是在云计算中。你不能简单地把一个单独的应用程序迁移到云计算中,并且指望云计算提供商能够深入挖掘它并且优化具体流程的执行。云计算还没有那样聪明。
网格如何?
网格的概念一直是围绕并行处理发展的。并行执行很长的或者在计算上很昂贵的任务可减少完成任务所需要的时间。但是,网格要求你把要并行处理的流程与应用程序分开。网格还没有智能化到这种程度,不能把这个分布式的应用程序作为一个功能或者在多台机器上运行以便提高执行的速度。至少在目前还没有达到这种智能程度。
这个问题似乎就是我们给云计算的属性。网格的属性更像是处理器调度,而不是指处理器能够做什么。因此,处理器周期的使用是云计算和网格概念不可分割的一部分。但是,调度整个处理器的单个逻辑部分的能力不是云计算或者网格能够做的事情,除非开发人员使用的工具和方法能够告诉他们这样做。
SOA的要点是什么,是不是这个功能?SOA能够把应用程序分解为单独的服务。这样,这些服务就可以智能地单独发布。如果一个服务被多个业务流程重复使用,它就能够复制或者迁移到云计算。这样,它就能够按比例地升级以满足其它应用程序对它的需求。
当然,这个问题是,分解单独的应用程序需要资源和时间。但是,实际上没有任何其它方法能够解决这个问题,至少目前是如此。云计算并不是能够用来发布单独的功能的庞大的处理器银行。云计算是服务器的庞大的银行。虽然它能够在这些服务器上发布这些应用程序,但是,它不能优化应用程序在这些处理器上的执行。这主要是网格的任务。利用网格也需要对应用程序进行一些修改。
如果你有一个应用程序,你可以采取两种方法,一个方法是把它迁移到云计算中,另一个方法是把这个应用程序分解为服务或者具有网格功能的流程。这些是你现在的选择。你可以选择这些做法,也可以不选择这些做法。如果你要把工作量迁移到云计算,你必须要让你的应用程序有这个能力。这就意味着SOA或者专有的网格功能。
相关阅读:
什么是SOA?
  面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
  这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。松耦合系统的好处有两点,一点是它 的灵活性,另一点是,当组成整个应用程序的每个服务的内部结构和实现逐渐地发生改变时,它能够继续存在。而另一方面,紧耦合意味着应用程序的不同组件之间的接口与其功能和结构是紧密相连的,因而当需要对部分或整个应用程序进行某种形式的更改时,它们就显得非常脆弱。
  对松耦合的系统的需要来源于业务应用程序需要根据业务的需要变得更加灵活,以适应不断变化的环境,比如经常改变的政策、业务级别、业务重点、合作伙伴关系、行业地位以及其他与业务有关的因素,这些因素甚至会影响业务的性质。我们称能够灵活地适应环境变化的业务为按需(On demand)业务,在按需业务中,一旦需要,就可以对完成或执行任务的方式进行必要的更改。
  虽然面向服务的体系结构不是一个新鲜事物,但它却是更传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的,已经存在二十多年了。虽然基于 SOA 的系统并不排除使用面向对象的设计来构建单个服务,但是其整体设计却是面向服务的。由于它考虑到了系统内的对象,所以虽然 SOA 是基于对象的,但是作为一个整体,它却不是面向对象的。不同之处在于接口本身。SOA 系统原型的一个典型例子是通用对象请求代理体系结构(Common Object Request Broker Architecture,CORBA),它已经出现很长时间了,其定义的概念与 SOA 相似。
  然而,现在的 SOA 已经有所不同了,因为它依赖于一些更新的进展,这些进展是以可扩展标记语言(eXtensible Markup Language,XML)为基础的。通过使用基于 XML 的语言(称为 Web 服务描述语言(Web Services Definition Language,WSDL))来描述接口,服务已经转到更动态且更灵活的接口系统中,非以前 CORBA 中的接口描述语言(Interface Definition Language,IDL)可比了。
  Web 服务并不是实现 SOA 的惟一方式。前面刚讲的 CORBA 是另一种方式,这样就有了面向消息的中间件(Message-Oriented Middleware)系统,比如 IBM 的 MQseries。但是为了建立体系结构模型,您所需要的并不只是服务描述。您需要定义整个应用程序如何在服务之间执行其工作流。您尤其需要找到业务的操作和业务中所使用的软件的操作之间的转换点。因此,SOA 应该能够将业务的商业流程与它们的技术流程联系起来,并且映射这两者之间的关系。例如,给供应商付款的操作是商业流程,而更新您的零件数据库,以包括进新供应的货物却是技术流程。因而,工作流还可以在 SOA 的设计中扮演重要的角色。
  此外,动态业务的工作流不仅可以包括部门之间的操作,甚至还可以包括与不为您控制的外部合作伙伴进行的操作。因此,为了提高效率,您需要定义应该如何得知服务之间的关系的策略,这种策略常常采用服务级协定和操作策略的形式。
  最后,所有这些都必须处于一个信任和可靠的环境之中,以同预期的一样根据约定的条款来执行流程。因此,安全、信任和可靠的消息传递应该在任何 SOA 中都起着重要的作用。