二、服务、服务、还是服务
服务是SOA架构的核心,因此理解SOA服务是正确理解SOA架构的关键。广义上讲,任何能够对外提供某种业务功能的实体单元都可以称之为服务。可以说,服务无处不在,我们每天都在享受服务,也在提供自己的服务。具体到SOA实践,服务还要求是平台无关的、松耦合、自包含和可编程的网络应用,服务可以以独立于平台的形式描述、发布、发现、协调和配置,从而实现高互操作性的分布式应用程序。例如,Web服务可以将软件应用包装成一种统一的计算模型,用以完成一项功能,进行一次商业事务,解决一个业务问题,将它们的特点以可编程的方式用标准的基于XML的语言和协议描述,通过自描述的接口进行调用。
服务有三个重要特征,即松散耦合、自描述的语义包装和可发现。
为了包容不同系统之间的异构性,服务之间必须遵循共同的描述语言和通信协议,以保证非常好的的交互性。与传统分布式应用开发不同的是,SOA更强调服务(即业务单元)的松散耦合。经过几十年的发展,软件开发领域已经产生了大量的降低系统耦合度的技术,比如面向对象技术、虚拟机技术和工厂模式等。过去,人们往往从功能角度从系统中分离出外部接口,通过隔离接口和实现在系统耦合和互操作之间寻找平衡点。SOA要求我们从业务单元的角度从系统中分离出对外服务,通过隔离服务和内部实现来满足系统之间互操作和彼此独立的要求。这样做有一个明显的好处,就是系统在保持自身健壮的同时,可以准确满足业务的需求和迅速适应业务的变化。
服务另一个重要特征是自描述。服务应该能够描述自身实现的业务功能,使用方法以及访问协议等。这些信息可以依据策略对外发布,其它系统可以通过这些描述信息了解该服务可以做什么、如何调用、返回什么结果。从这个角度看,服务是一种公共契约,系统通过服务对外提供服务承诺,而用户可以通过公开的描述信息访问服务,不必了解服务实现的方式。例如,Web服务以描述语言-WSDL进行描述,提供功能性和非功能性的描述。功能性描述定义了整个服务行为,而非功能性描述包括服务可用性、可靠性、可扩展性、安全、认证、(事务)集成;以及性能特性,包括速度和精确性,时限信息和付款方式(资助,租赁,购买使用权,按次购买使用权等)。
服务还是可发现的。这意味着用户可以通过自己找到所需要的服务,并使用它。服务提供方可以完全不干涉,全部过程都由第三方或用户完成。这样做有一个明显的好处是可以大大降低服务的发布和使用成本。
服务的种类
根据互操作性,服务大致可分为简单信息服务和复杂服务。简单信息服务如新闻、货币转换,信用卡认证,帐户状态确认和天气预报等;复杂服务,需要用户和系统多次交互,服务本身可能需要访问和组合多个服务供者(如股票交易系统、旅游帮助系统、保险计算或包裹追踪系统等),通常是有状态的。Type I所表示的信息服务,只支持内置的操作,这类服务的处理过程包括等待请求信息、处理请求、返回请求Type II所示的复杂服务,实现了内置操作和外部操作的某种协调,通常是有状态的。

图1: 简单信息服务和复杂服务
信息服务一般都相对简单,通过简单的请求/响应顺序进行交互。信息服务可能包括复杂的实现。例如信息发布服务,其涉及系统可能包括内容管理系统、视频管理系统以及一些应用系统的信息发布模块。这些服务都是请求/响应模式、一来一回的,通常可以看成原子操作,服务装配器将这些服务组装成一个服务。
信息服务完成一个完整的业务单元。一般来说都不包括事务和交易。信息服务不处理服务请求之间的关系。从这个角度看,信息服务可以看作无状态服务。
信息服务目前有3个标准支持:(i)服务描述(WSDL),(ii)服务发布和发现(UDDI)和(iii)服务通讯协议(SOAP)。信息服务的局限是不包含事务处理、流程处理和复杂交易处理。
复杂服务可以处理事务,因而是有状态的。业务流程双方在交互信息中都包含了状态了信息,这些状态信息包括交互信息和业务的中间数据。复杂服务将保持一个或多个Web服务客户端发出多次的请求的状态。例如,一个安全的网上销售服务,购买和提供商谈判并完成订单。在这一过程中,会有大量信息交互,包括请求报价、返回报价、购买订单请求、订单完成确认等。在最终完成订单前,将要求长时间的事务处理和异步处理。除了和信息服务一样需要SOAP、WSDL、UDDI等协议的支持外,复杂服务还需要业务流程和事务处理的协议支持。复杂Web服务的标准仍然在发展之中,包括SOAP、WSDL、UDDI、WS-MetaDataExchange,以及Web服务流程执行语言BPEL等。