内容


Web 服务领域中的事务,第 1 部分

WS-Transaction 和 WS-Coordination 概览

Comments

背景

Web 服务是独立的、模块化的业务流程应用程序,它基于以下行业标准技术:(用于描述的)WSDL、(用于做广告和联合的)UDDI 以及(用于通信的)SOAP。Web 服务为不同的组织提供了一种手段,用来将组织的应用程序相互连接起来,从而以一种平台和语言独立的方式在网络上经营生意。

然而,迄今为止,这些技术所缺少的是支持一种功能程序来为 Web 服务应用程序提供一致性和可靠性。

事务是构建可靠的分布式应用程序中的基本概念。事务是一种用来确保应用程序中的所有参与方都能达到彼此已达成协定的输出结果的机制。传统上,事务都共同具有以下被称作 ACID 的属性:

  • 原子性(Atomicity):如果成功,则所有操作都发生,如果不成功,则所有操作都不发生。
  • 一致性(Consistency):应用程序在完成的时候才进行有效状态的转变。
  • 隔离性(Isolation):在事务成功完成之前,各项操作的结果都不能被外界共享。
  • 持续性(Durability):事务一旦成功完成,各项修改都能从失败中恢复过来。

Web 服务环境需要与上述相同的由传统事务机制所提供的协调行为,用来控制应用程序的各项操作和输出结果。然而,Web 服务还需要能够以一种更灵活的方式来协调对多个服务的输出结果(outcome)或结果(result)进行的处理。这就需要形式更松散的事务 ― 这些事务并不严格遵循 ACID 属性 ― 如协作(collaboration)、工作流(Workflow)和实时处理(Realtime processing)等。此外,也存在把 Web 服务组合成需要某种形式的相关性但却不一定需要事务行为的应用程序这种需要。WS-Coordination 规范和 WS-Transaction 规范为这样的协调行为提供了 WSDL 定义。

目前的一套 Web 服务规范[WSDL、SOAP](请参阅 图 1)定义了针对 Web 服务互操作性的协议。Web 服务正日渐将数量庞大的参与方连接起来以形成分布式应用程序。这样得到的应用程序在结构上可能是极其复杂的,各参与方之间的关系也很复杂。

图 1. Web 服务标准
图 1. Web 服务标准
图 1. Web 服务标准

这样的应用程序的执行由一系列 活动(activity)组成。这里把活动定义为一种通用计算,它是在一组 Web 服务(这些 Web 服务需要彼此达成协定的输出结果)上执行的一组有作用域的操作。由于业务延迟、网络延迟以及等待用户与应用程序交互,这样的应用程序常常需要一些时间才能完成。

WS-Coordination 规范中描述的系统是一个通用的功能程序,用来管理与整个应用程序相关的活动或任务。WS-Coordination 支持、集成并统一了几种流行的协调模型,这些协调模型提供了允许各种系统以事务方式进行互操作的机制和技术;例如,WS-Coordination 规范将考虑到 IBM 的和 Microsoft 的 Web 服务模型之间的互操作性。

WS-Coordination 提供了创建和注册服务的标准机制,使用的是在 WS-Transaction 规范中所定义的协议,这些协议协调 Web 服务环境中分布式操作的执行(例如,原子事务协议和长期运行业务事务协议等)。WS-Coordination 还提供了一个重要的基础层,这个层能帮助开发者控制广泛分布在可互操作的多个 Web 服务中的操作。

开发者可以按照需要将这两个新规范结合到支持 Web 服务应用程序的不同级别的实现中。

事务的新设计

本文描述一种实现通过两个新规范中定义的 协调框架(Coordination Framework)协调协议(Coordination Protocol) 来实现事务的新办法,这个办法是可扩展的。

WS-Coordination 规范中定义的协调框架支持以下服务:

  • 激活服务(Activation Service),用来创建活动。
  • 注册服务(Registration Service),用来协调协议选择(protocol selection)和注册参与方。
  • 协调服务(Coordination Service) ,用于活动完成处理(activity completion processing)。

WS-Transaction 规范中定义的协调协议如下:

  • 用于原子事务的协议。用于原子事务的协议处理短期存在的活动。人们常把原子事务看作是提供了一种两阶段提交协议。事务作用域要求所有工作全部完成,也就是说,一个活动如果成功了,则活动的结果是所有操作都已执行,或者如果一个活动不成功,则活动的结果是未执行任何操作。当成功完成时,活动的结果可以被其他用户使用。
  • 用于业务事务的协议 。用于业务事务的协议处理长期存在的活动。这些活动与原子事务的不同之处在于:此类活动可能需要长得多的时间才能完成、使其他潜在的用户能在最短的延迟内访问该活动所占用的资源、在整个活动完成之前就要将临时操作的结果被释放。有鉴于此,人们引入了故障处理机制和补偿处理机制(例如,补偿和调和(reconciliation)等),以将前面已经完成的业务活动的效果恢复成原来的样子。

可以相互组合使用以上协议。例如,短期运行的原子事务可以成为长期运行的业务事务的一部分。在长期运行的业务事务完成前,嵌入的原子事务的动作就被提交并且成为可见的,万一长期运行的业务事务失败了,则需要对这些原子事务的效果进行补偿,也就是开放嵌入式事务。

举例来说,请考虑 图 2 ,它显示了在应用程序的生命周期内进行相互合作的一系列相关活动。其中的椭圆表示协调边界,各个活动的编号是 A0 到 A5。在其执行期间使用一个协调点的活动 A1 和显示了在其执行期间有嵌套活动的活动 A2 是特别相关的。此外,该图还说明了一个由分布式环境中的复杂计算组成的应用程序也可以表示为单个活动(A0)。协调框架负责分发描述执行环境之间的活动的信息,这些信息是保证分层结构是完全分布式的所需要的。

图 2:处理流中的活动关系
图 2:处理流中的活动关系
图 2:处理流中的活动关系

协调框架(Coordination Framework,WS-Coordination)

协调框架(请参阅 图 3)由以下三个元素组成:

  • 激活服务(Activation service)
  • 注册服务(Registration service)
  • 协调服务(Coordination service)

服务的操作和消息用 WSDL 定义。

图 3. WS-Coordination 概览
图 3. WS-Coordination 概览
图 3. WS-Coordination 概览

激活服务

激活服务使用 create 消息来:

  • 开始一个新的活动
  • 指定该活动可以使用的协调协议

此外,激活服务还允许用户指定新创建的活动和现有活动的关系(即建立活动之间的上下级关系或嵌套关系),这一点是可选的。

注册服务

注册服务“注册表”允许 Web 服务进行注册和为活动选择协议。登记(enrollment)和选择(selection)允许活动所涉及的 Web 服务建立传统的协调器角色和参与方角色。注册过程标识用来协调活动的特定协议。

规范的作者们预见到其它机制将会为支持 WS-Transaction 的 Web 服务提供一种方法来支持其协调协议定义。定义信息包含 Web 服务支持的事务协议和属性规范。没有定义用来在协调器和参与方之间传递协议信息的机制。

协调服务

协调服务通过所选择的协调协议(WS-Transaction 中定义的)控制已注册 Web 服务的活动完成处理。一个特定的协调协议将提供对支持完成处理所需的行为要求和操作的定义。典型的情况是,操作通过角色来识别,例如,对于原子事务,协调器提供一个与应用程序的接口以直接 completion (即提交和回滚),而参与方则提供一个与协调器的接口以直接 agreement (即准备、提交和回滚)。

上下文

对于新创建的活动,激活服务会返回一个包含以下字段的 CoordinationContext

  • Identifier :一个唯一的名称,用来标识 CoordinationContext
  • Expires :活动的超时值
  • CoordinationType :一组已定义的协调协议,这些协议描述所支持的完全处理行为
  • Registration Service :注册服务的地址,这个服务用来注册协调协议中的兴趣点(interest)和参与方式(participation),以确定活动的整体输出结果
  • Extensibility element :是为可选的特定于实现的扩展而提供的(请参阅 清单 1
清单 1. WS-Coordination 的供特定于实现的扩展使用的可扩展性元素
<soapenv>
 <soapbody>
   <wscoor:CoordinationContext 
       <Identifier> ... </Identifier>
       <Expires> ... </Expires>
       <wscoor:CoordinationType> ... </wscoor:CoordinationType>
       <wscord:RegistrationService>
               <Address/>
       </wscoord:RegistrationService>
       <!--extensibility element ->
    </wscoor:CoordinationContext>
 </soapbody>
</soapenv>

以下是一个原子事务的 CoordinationContext 的示例。已经添加了一个 IsolationLevel 元素,用以说明一个特定于产品的扩展的示例:

清单 2. 一个原子事务的 CoordinationContext 的示例
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2001/12/soap-envelope"
    <S:Header>
        . . .
        <wscoor:CoordinationContext 
            xmlns:wsme="http://www.w3.org/2002/06/msgext" 
            xmlns:wscoor=http://www.w3.org/2002/06/Coordination 
            xmlns:myApp="http://www.w3.org/2002/06/myApp">
            <wsme:Identifier>
                 http://foobaz.com/SS/1234
            </wsme:Identifier>
            <wsme:Expires>
                 2002-06-30T13:20:00.000-05:00
            </wsme:Expires>
            <wscoor:CoordinationType>
                http://xml-soap.org/2002/06/AtomicTransaction 
            </wscoor:CoordinationType>
            <wscoor:RegistrationService>
                <Address>
                    http://myservice.com/mycoordinationservice/registration   
                </Address>
                <myApp:BetaMark> ... </myApp:BetaMark>
                <myApp:EBDCode> ... </myApp:EBDCode>
            </wscoor:RegistrationService>
            <myApp:IsolationLevel>
                  RepeatableRead
            </myApp:IsolationLevel>
        </wscoor:CoordinationContext>
        . . .
	    </S:Header>

为了让活动能够跨越分布式环境,上下文信息必须与应用程序消息关联起来。实现一般会在源代码中将上下文附加在应用程序消息后面,以在目标处建立执行环境。

Web 服务事务的几种情形

我们已经解释了 Web 服务中协调和事务系统如何工作的基本情况。协调框架提供了一个系统用来协调 Web 服务分布式网络内的通信,这个框架既可以与具有 ACID 属性的严格的基于事务的系统一起工作,又可以与其它形式的事务一起工作,而协调协议则可以实现实际的 ACID 事务。

在接下来的一篇文章中,我们将一步一步地详细讨论 Web 服务事务的两种情形。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=21177
ArticleTitle=Web 服务领域中的事务,第 1 部分
publish-date=11012002