在计算的早期,应用程序往往被构建成一个庞大的、内部错综复杂而相互之间又紧密集成的整体。这种方式不仅难以构建大型应用,而且维护和升级都非 常困难。自20 世纪80 年代以来,软件行业已逐渐采用面向对象的方式来构建应用程序。通过面向对象的方法,可以更方便地把实际问题中涉及的对象与计算机中的对象建立关系。在这种 开发方式中,应用程序往往被分解成不同的组件“分而治之”。如果组件划分得当,应用程序的可维护性和可重用性可以得到很大提升。然而,这种面向对象的方式 在对象之间或者组件之间还是有比较大的耦合度,而且更为重要的是随着互联网的出现,分布式应用变得更为普遍,而面向对象的方式并不适合基于网络的调用。为 了实现软件组件之间的独立性,让软件更符合互联网的运行环境,2000 年前后Web 服务开始出现。服务是软件功能的抽象,通过Web 服务一方面可以标准化软件功能接口(如WSDL 或REST ),另一方面通过抽象把具体实现屏蔽掉,使得应用服务的调用与平台和地点无关,从而可实现基于互联网的分布调用。当越来越多的服务被提供出来之后,就开始 逐渐涉及服务的注册、调用、组合和管理等一系列问题,这就需要从架构上进行设计和考虑了,于是就出现了面向服务的架构(SOA )方式。
业务与IT 实现有一个差异,而架构是沟通两者的一个桥梁。SOA 的出现为IT 人员与业务人员进行沟通提供了一个良好的机会和基础。在这个框架的支持下,软件系统的开发将从业务流程分析开始,使用组件化业务建模的方法识别和分析各种 业务模型,并将各种最佳实践融入其中。在这个松耦合的框架中有可能有一条或几条企业服务总线(ESB, Enterprise Service Bus),所有的服务都通过ESB 提供,甚至包括一些管理协议也通过XML 格式的消息在ESB 上传输。SOA 的关键是让IT 部门从面向服务的角度考虑IT 对业务的支撑,它是一个业务驱动的IT 架构,可以把业务集成为相互连接的、可重复的任务或服务,从而增加业务流程的灵活性。
SOA 还可让IT 部门学会从服务的角度考虑技术的应用。我们不用关心服务具体运行在什么平台之上,从理论上讲也不用关心服务实例的扩展性如何,而只需要关心服务的质量 (QoS )和其他服务水平协议(SLA, Service Level Agreement )所限定的内容是否满足。虽然在云计算开始出现的时候有人声称SOA 已经死了,但是我们认为就像我们现在很少谈论面向对象一样,实际上SOA 已经成为我们设计企业应用架构的默认标准。
SOA 关注在业务与IT 的结合之上,而云计算关注在让IT 作为一种服务来供应的模式,因此SOA 和云计算可以非常好地结合在一起。SOA 通过应用的组合和服务流程编排来实现企业的灵活性。这些服务可以是企业内部的,也可以是第三方通过网络提供的。SOA 也能通过多层服务架构的方式屏蔽遗留IT 系统的具体实现,从而为IT 服务提供灵活性。云计算为企业提供的是另一个层面的灵活性。企业可以通过云计算服务快速部署业务应用,而不需要事先花大量精力在IT 基础架构服务上。如果采用公有云服务的话,这些业务应用的部署还可以变得更为便捷和快速。所以,SOA 和云计算可以从不同角度为企业提供灵活性。
在SOA 中定义的服务最好是被部署在云平台上,这样可以保证服务的可用性和可扩展性。以云计算作为托管平台的SOA 服务可以更好地支持高峰期的访问要求以及多个不同类型客户的SLA 要求。云计算平台能够从资源使用的角度保证应用程序的灵活性,但是要让应用的构建和功能保持灵活性,需要采用面向服务的方式来构建我们的应用,也就是说在 云计算的环境下我们同样需要SOA 的思想来设计应用。如果我们事先构建了一个服务池,那么就可以通过某种服务编排的方式来创建一个新的服务或一个新的组合应用。这种组合构建方式可以给应用 的架构带来很大的灵活性。
在云计算的环境下,可以通过SOA 的设计思想,从问题本身需求出发设计和组合应用的服务,可以利用不同平台上的服务而不再局限于企业内部。在设计服务的时候,一个重要的设计目标就是让服务 变成与平台或者位置无关。新的服务或应用可以组合在企业内部的服务以及部署在像Windows Azure 云平台上的服务。