计算环境由计算机、相关的软件平台和以及连通这些计算机和相关软件平台网络组成。不同的计算环境有不同的计算风格和编程模型,由一些特定于该计算环境的技术来支撑。
在面向服务的计算环境(其实更准确的说,是面向服务架构的计算环境)中,系统可以是高度分布、异构的。它一般包括服务运行时环境(Service Runtime)、服务总线(Service Integration Infrastructure)、服务网关(Service Gateway)、服务注册库(Service Registry)和服务组装引擎(Service Choreography Engine)等。
其实,服务总线、服务注册表和业务服务编排都是面向服务架构的基本模式之一。
服务运行时环境提供服务(和服务组件)的部署、运行和管理能力,支持服务编程模型,保证系统的安全和性能等质量要素。
服务总线提供服务中介的能力,使得服务使用者能够以技术透明和位置透明的方式来访问服务。服务注册库支持存储和访问服务的描述信息,是实现服务中介、管理服务的重要基础;而服务组装引擎,则将服务组装为服务流程,完成一个业务过程;服务网关用于在不同服务计算环境的边界进行服务翻译,比如安全。
面向服务的计算环境是开放的、标准的,由如下图所示的技术标准协议栈所定义和支持。例如,Transport层的HTTP协议,Service Description层的WSDL,Business Process层的WS-CDL等,与Policy相关的WS-Policy。本书后面的章节将讨论所有统称为WS-*的标准和协议。
我们知道,面向服务的计算机环境是和传统的主机模式的计算环境、客户机-服务器模式的计算环境、基于组件的计算环境、基于分布式网络的计算环境和混合Web Service的计算环境区别的,那么到底什么才是面向服务的计算环境呢?
1、看在整个IT生命周期中(包括应用的构建和运营)和各个阶段,是否是以服务为中心的,服务是否为第一位的核心概念;
2、IT是否和业务对齐,IT系统是否足够的灵活,也就是说IT对业务需求和业务需求的变化的响应是否可以达到业务人员的期望;
3、IT系统本身是否是松散耦合的。松散耦合是指信息的消费者和信息的提供者之间是否是松散耦合的,如果以服务为中心的话,那其实就是指的是,服务的消费者和服务的提供者之间是否是松散耦合的。这包括:在服务契约的设计上,是否通过抽象设计减少了技术依赖性;在服务调用层面上,是否通过Web Service技术保持服务调用的平台的中立性。
4、功能的暴露或者说功能的接口是否是粗粒度的。
5、位置和传输协议是否透明。所谓位置的透明,就是指不论服务组件的实际位置URL如何变化,客户端的调用程序的URL都不需要改变。同理,目前的服务组件如EJB、Web Service、JMS都只能接收特殊的传输协议,如EJB只接收RMI的传输协议,Web Service只接收SOAP的传输协议,JMS组件只接收JMS的传输协议。这样导致客户端调用这些服务组件时,也必须采用相应的传输协议才能调用,一旦组件的传输协议改变了,客户端也必须要修改相应的传输协议。这就是传输协议的不透明。所谓传输协议的透明,就是指不管服务组件的传输协议如何变化,客户端的调用程序的传输协议都不需要改变。
SOA的思想通过服务总线对目前的组件的接口进行进一步的封装(新的SCA编程模型将可以自由绑定传输协议),将能保证服务的位置的透明和传输协议的透明。下面两副图展示了位置和传输协议都是不透明的基于组件的调用方式和基于服务总线技术的传输协议和位置透明的调用方式。
图:传输协议和位置都不透明的基于组件的调用方式
图:基于服务总线技术的传输协议和位置透明的调用方式