2005-05-27
SOA(面向服务的架构)已经成为近期的一个时髦术语。十多年来,虽然在SOA背后的那些概念已经广为流传,但直到最近,由于Web服务的普及,SOA也已变得极为普及。在我们深入探讨SOA是什么以及SOA背后的本质之前,很有必要首先回顾一下SOA的演化。在回顾时,我们只须看一看在过去的几十年中,开发人员面临了哪些挑战,并考察一下他们提出的解决问题的方案。
开发人员面临的挑战 早期的程序员已经意识到编写软件正变得越来越复杂。他们需要采用一种更好的方法来重用一些代码,避免重写这些代码。当研究人员注意到这一点时,他们引入了模块化设计的概念。在模块化设计原则的指导下,程序员能够编写子例程和函数,并且重用它们的代码。这一原则在一段时间内发挥了良好的作用。后来,开发人员开始将模块剪切和粘贴到其他的应用程序里,从此,维护的噩梦开始了;当一个函数中发现程序缺陷时,他们必须找出所有使用该函数的应用程序,并修改代码以反映所做的修复。在修复之后,部署的恶梦开始了。开发人员们不喜欢那种做法;他们需要更高级别的抽象。
研究人员提议使用类和面向对象的软件解决这个问题以及其他许多问题。同样,随着软件的复杂性日益增长,开发人员再一次认识到开发和维护软件的复杂程度,他们想采用一种方式来重用和维护功能性,而不仅仅是重用和维护代码。不过,研究人员又提供了另一抽象层来处理这种复杂性——基于组件的软件。基于组件的软件是一种重用和维护的良好解决方案,但是它没有解决当今开发人员所面临的全部复杂问题。
目前,我们面临的复杂问题,比如分布式软件、应用集成、各种平台、各种协议、多种设备、Internet,等等。当今的软件必须能够应对上述所有的问题。简而言之,SOA(与Web服务一起)提供了一个解决上述所有问题的方案。通过采用SOA,您可以消除有关协议和平台的令人头痛的问题,并且您的应用程序能够无缝地集成起来。
SOA的关键组件 在学习新事物的过程中,第一步是理解它的词汇表。就SOA而言,我们的术语有:服务,消息,动态发现和Web服务。每一个术语在SOA中都起着不可或缺的作用。
服务 SOA中的服务是外部可见的功能,具有三种特性: 1.
服务的接口定义是平台无关的。
面向服务的架构(SOA)阐释: 2. 该服务可以动态定位和动态调用。
3. 该服务是自包含的。也就是说,该服务维护它自己的状态。
平台无关的接口契约表明,来自任何地方、在任何操作系统(OS)上、采用任何语言的客户,都能消费服务。动态发现说明发现服务(例如,目录服务)是可用的。目录服务使您能够使用一种查询机制,消费者可以根据某种标准去查找服务。例如,如果我正在寻找一种信用卡授权服务,我可以通过查询目录服务找到一份服务提供者的名单,这些提供者能够授权信用卡,并收取一定的费用。根据所收取的费用,我将选择一种服务(参见图1.1)。该服务的最后一种特性是该服务的自包含的。
图1.1. 目录服务
消息 服务提供者和消费者通过消息进行通信。服务公开了接口契约。该契约确定服务的行为和服务所接受并返回的消息。因为接口契约是平台无关和语言无关的,用来定义消息的技术必须也是与任何特定的平台/语言无关的。因此,消息往往使用符合XML
schema的XML文件来构造。XML提供了消息需要的所有功能、粒度和可扩展性。也就是说,为了使消费者和提供者有效地进行通信,他们需要一种非限制性的系统类型来明确地定义消息;XML提供了这种系统类型。因为消费者和提供者之间通过消息进行通信,所以消息的结构和设计不应该被轻率地做出决定。实现消息时,需要使用支持服务的可伸缩性需求的技术。因此,重新设计消息必将中断与提供者之间的接口,这证明代价是高昂的。
动态发现 动态发现是SOA中重要的一环。从高层面来看,SOA由三个核心部分组成:服务提供者,服务消费者和目录服务。提供者和消费者的角色显而易见,但是我们需要对目录服务的作用作一些解释。目录服务是服务提供者和消费者之间的媒介。提供者利用目录服务进行注册,消费者查询目录服务找到服务提供者。大多数目录服务通常根据某种标准来组织服务并且将服务进行分类。然后,消费者就能使用目录服务的查询功能来查找服务提供者。把目录服务嵌入SOA可以完成如下内容:
服务的可伸缩性;您能够逐渐增加服务。
1. 从提供者中分离出消费者。 2. 允许服务的线上更新。 3. 为消费者提供一种查找服务。 4.
允许消费者在运行时选择提供者,而不是硬编码单个提供者。
Web服务 尽管在SOA背后的概念早在Web服务出现之前就已经确立了,不过Web服务仍在SOA中起主导作用。这是因为Web服务建立在著名的平台无关的协议之上。这些协议包括HTTP、XML、UDDI、WSDL和SOAP。正是这些协议的结合使Web服务如此有吸引力。此外,正是这些协议满足了SOA的关键要求。也就是说,SOA要求一种动态可发现的和可调用的服务。这一要求由UDDI、WSDL
和SOAP来满足。SOA要求服务具有平台无关的接口契约。这一要求由XML来满足。SOA强调互操作性。这一要求由HTTP来满足。这就是Web服务成为SOA核心的原因。
结束语 即使我们在软件开发方面已经积累了数十年的经验,但是我们仍未揭开软件复杂性的奥秘。随着复杂性的增长,研究人员发现了更多新颖的方法来解决这一问题。与Web服务相结合的SOA,是最新的答案。应用集成是当今公司面临的主要问题之一;SOA
能够解决这个问题。系统可用性、可靠性和可伸缩性仍然是当今公司所面临的棘手问题;SOA解决了这些问题。鉴于目前的需求,SOA是应用架构的最佳的可伸缩的解决方案。
|