什么是服务?如前所述,在一个典型的业务环境里,服务意味着业务函数、业务事务和系统服务。业务函数可能是 getStockQuote、getCustomerAddress 或 checkCreditRating。业务事务可能是 commitInventory、sellCoveredOption 或 scheduleDelivery。系统服务可能是 logMessageIn、getTimeStamp 或 openFile。请注意各种类型服务之间的区别。从应用程序的角度来看,业务函数实际上是原子的非系统函数。业务事务很像是调用应用程序的简单函数,但是它们可能是作为自己的事务的上下文所包含的复合函数来实现的。它们可能包括多个底层函数,这些底层函数对调用者来说是透明的。系统函数是能够从诸如 Windows 或者 Linux 这样的特定平台中抽象出来的广义函数。应用程序框架可能提供像 openFile 这样的广义函数来有效地虚拟化数据源,从而可以在不考虑真实数据源的类型和位置的情况下使用这类函数。
Web 服务的出现产生了根本的改变,因为很多 Web 服务项目的成功显示这种技术事实上确实存在,借此您可以实现真正的面向服务的体系结构。它使您又往回走了一步,不仅分析您的应用程序的体系结构,而且还要分析您正设法解决的基本业务问题。从业务的角度来看,它不再是一个技术问题,而是要开发一种应用程序体系结构和框架,可以在其中定义业务问题,还可以以一致的可重复的方式来实现解决方案。
不过,首先必须理解 Web 服务并不等同于 面向服务的体系结构。Web 服务是包括 XML,SOAP,WSDL 和 UDDI 在内的技术的集合,它使您能够针对特定的消息传递和应用程序集成问题构建编程解决方案。随着时间的推移,您有理由相信这些技术将逐渐成熟并最终为更好、更有效、更健壮的技术所取代,但是,就目前的情况而言,它们可以发挥作用。至少,它们是 SOAs 能够最终实现这种观念的证明。那么,面向服务的体系结构实际上是由什么组成的呢?
SOA 只不过是一种体系结构。它不是任何诸如 Web 服务这样的特定技术的集合;而是超越它们的,在理想的情况下,是完全独立于它们的。在业务环境中,SOA 的纯粹的体系结构定义可能会是这样的“一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,可以以定义好的顺序调用这些服务来形成业务流程”。请注意这里的表述:
在所有这些表述中,接口是最关键的,同时也是调用应用程序关注的焦点。它定义了必需的参数和结果的类型;因而,它定义了服务的类型,而不是实现服务的技术。系统的责任是实现和管理服务的调用,而不是调用应用程序。这使得可以认识到两个关键的特征:其一,服务是真正独立的;其二,它们是可以管理的。管理包括许多功能,其中有: