摘要:事务处理是可靠应用程序的基础。Web服务环境下的事务处理放宽了事务的原子性和隔离性,传统事务并发机制会长时间锁定资源,导致系统性能下降。本文将隔离域的概念应用于Web服务事务处理中,利用不同隔离域的属性控制事务中不同活动的并发。该方案扩展了WS-Transaction和WS-Coordination规范,引入域管理器管理隔离域,并给出了基于隔离域的并发控制算法和控制机制。最后给出了该方案的系统实现。
关键字:Web服务;事务;并发控制
中图法分类号:TP311 文献标识码:A 文章编号:
引言 事务是进行可靠的应用程序处理最基本的概念,用来保证应用程序对数据资源访问的一致性和可靠性,一个逻辑工作单元的操作集合构成一个事务[1]。随着网络技术的发展和应用需求的变化,Web服务正成为基于Internet的新一代计算平台,分布式事务已成为构造可靠分布式应用的基础。
ACID特性是事务的本质属性。原子性(Atomicity):事务只有两个执行结果,要么全部提交,要么全部撤销;一致性(Consistency):事务保持系统状态恒定,执行结果使系统从一个一致性状态变化到另一个一致性状态;隔离性(Isolation):并发执行的事务互不干扰,事务执行的中间状态对其他事务不可见;持久性(Durability):事务一旦提交,其对系统的改变是永久的,事务操作之后产生的影响将不可改变。传统的事务通过两段提交协议(2PC)和锁机制保证事务属性。
Web服务的事务环境有很大不同。它所拥有的长事务性、自治性、松耦合性、稳定性和多边界等特性使得传统分布式事务细粒度的加锁机制和高度信任的协作约束无所适从。尤其是事务过程可能跨越多个组织机构,执行时间较长,服务主体具有很强的自治特性,事务过程不再拥有统一的控制和决策,而是靠相互协商来完成。
目前,针对分布式的事务处理已有一些业界规范和学术研究成果,典型的有WS-Transaction[2][3](简称WS-Tx)、WS-Coordination[4](简称WS-C)、THP[5]等。文献[6]改进了现有的WS-Tx和WS-C协议,在Web服务提供端设置一个冲突矩阵,记录各Web服务的依赖关系,参与者管理器(Participants Manager)负责动态更新该矩阵,形成事务的并发执行序列,减少了Web服务间的通信,但没有考虑不同事务实例中相同的活动以及同一事务多个实例的并发问题。
文献[7]改进了THP协议,当活动调用访问共享资源冲突时,把活动挂起加入等待队列。同时,在初始化阶段,根据事务属性设置等待时间,该机制在一定程度上提高了效率,但未充分考虑共享资源的属性。本文扩展WS-Tx和WS-C提出了一种基于隔离域的并发机制,定义了Web服务环境下隔离域和域管理器的概念,隔离域由域管理器动态生成,并为共享资源的属性设置相应的隔离级别,隔离级别解决了同一事务实例中不同活动、不同事务实例中相同的活动以及同一事务多个实例的并发问题。
事务处理协议 Web服务环境下,事务中的活动可能来自不同的服务提供者。图1给出了事务处理过程(T1和T2)并发地调用来自不同参与者(P1和P2)的Web服务,事务处理过程需要分别从服务调用者和服务提供者的角度保证共享资源和事务状态的一致性。
图1 Web服务环境下的事务处理[6]
1.1 WS-Transaction (WS-Tx)
WS-Tx通过子协议WS-AT和WS-BA描述两种协调类型。WS-AT定义Web服务原子事务的协调类型,WS-BA定义Web服务商业活动。WS-AT类似传统的事务,WS-BA对应于长事务,该事务执行时间较长,可能跨越多个机构,参与事务的各部分一般不允许长时间锁定资源。
图2给出了WS-BA的状态转换图,事务各状态间以消息驱动。图中实线代表协调者发送的消息,包括cancel、complete、close、compensate、faulted和exited;虚线表示参与者发送的消息,包括exit、completed、fault、canceled、closed和compensated。本文讨论的主要涉及WS-BA。
1.2 WS-Coordination (WS-C)
WS-C是一个开放的协调框架,能广泛兼容Web服务事务处理规范。该规范提出了协调器和参与者的概念,协调器在Web服务的调用端,负责保证一致性,协调器之间能相互通信;参与者在Web服务提供端,代表Web服务。WS-C和WS-Tx能共同完成Web服务事务处理,参与者和协调器以消息驱动的方式实现协调。
图2 WS-BA协议的状态转换图[3]
基于隔离域的并发控制机制 WS-Tx该用户请求不能提交或需要回滚。两个用户的操作可能在可接受的时间内完成,若直接执行补偿操作则会降低事务执行的成功率。对这样的机制可作如下改进,在WS-Tx中增加“等待”状态,并根据事务共享资源的属性定义相应的隔离属性,以增加事务执行的成功率。同时,两个用户操作共享数据会产生读脏数据、修改丢失等现象,需要有相应的并发机制来解决。 隔离域及其属性的定义 在工作流中,文献[8]提出隔离域的概念来解决事务工作流的并发执行。针对Web服务中松耦合等特点,本文提出了Web服务环境中事务的隔离域。
定义1 隔离域 定义为一个五元组(T, WS, R, Iin, Iex),T表示隔离域所属于的事务,WS表示该隔离域内所有的Web服务集合,R表示域内活动所要访问的共享资源,Iin表示域内的隔离属性,Iin=(Iα, Iβ),其中包含同一事务实例内的隔离级别Iα和同一事务不同实例的隔离级别Iβ,Iex表示隔离域外的隔离属性,Iex=(Iγ),用Iγ表示其隔离级别。
从定义可以看出,一个隔离域代表访问某些共享数据的一个活动集。隔离域在Web服务的提供端(如图3所示),在Web服务的建模阶段基于Web服务的具体特征,即在一个事务内根据业务语义上的共享数据访问冲突,来划分隔离域,并且设置相应的隔离属性。在事务的运行阶段,应用隔离级别来控制Web服务运行中出现的各种并发情况。其中,域内隔离级别控制域内并发活动的共享资源访问控制,域外用于访问相同共享数据的不同隔离域之间的并发控制和不属于任何隔离域的活动对某一域内资源的访问控制。
图3 域管理器模型
定义2 域内隔离属性[8] 指控制一个隔离域内的所有活动并发访问共享资源的机制。
用T表示一个事务,ρ表示一个隔离域,Aρ表示域中所有的活动,Δρ表示隔离域ρ的共享数据,Tδ ={δα0, δβ1, … δγ2}表示数据δ历史,δαi表示数据δ被活动α改写,α∈Aρ,i表示数据δ被修改的次数,δα表示活动α对数据所做修改最后的有效值。以下面的序列为例: