举例 在民航综合信息平台[9]中应用了本文提出的事务并发控制,解决了事务并发的问题。本平台提供了航班预定、酒店预定和天气查询等民航公众信息服务。用户注册为本系统的会员后,使用其提供的服务都会获得积分,会员积分能换取各种增值服务。
在该平台中,存在三种并发情况:
(1)同一事务的多个活动并发。同一事务中的不同活动更新共享资源的状态会造成修改丢失和读幻象的现象。图6描述了一个会员通过旅行代理完成从A城市到B城市的行程安排,其中包括酒店预定和机票预定,同时完成会员积分累计。预定前首先查询会员积分,判断其是否能享受会员服务,预定成功后,如果同时修改会员积分,会造成丢失更新的现象。因此,在初始化事务时,需要把两个修改会员积分的操作划分为一个隔离域,并设置隔离级别Iα为提交,则只有一个活动提交修改之后另一活动才能操作同一账户。在检查会员信息时存在两次读会员信息的操作,完成第一次检查后执行积分累计活动,第二次读操作会造成读幻象的现象。这种现象可以把两个活动的域内属性设置为Iα为提交解决。
图6 旅行代理执行流程
(2)不同事务实例的不同活动并发。事务中活动执行操作存在随机性,不同的执行顺序产生不同的结果。例如,事务T1包含两个活动O1、O2,O1完成从账户1增加积分M,O2完成对账户2增加积分N。事务T2包括三个活动O3、O4、O5,T2实现系统用户信息统计,O3读取账户1积分,O4读取账户2积分,O5累加两个账户积分。这种情况下,账户1和2的积分为T1、T2间的共享资源。T1、T2并发,可能的执行顺序为O1->O3->O4->O2->O5,这样O5统计的数据为更新前的数据,两个事务执行的结果产生错误。为了保证系统正确性,T1 执行完后,T2才执行。需要把O1、O2划为一个隔离域,设置域内隔离级别Iβ为串行,将外部访问级别Iγ设为完全一致性,此时同一时间段内只有一个事务操作一个账户。
(3)同一事务的多个实例并发。会员能预定平台中有限的特价机票。当有两个会员A、B同时调用旅行代理预定机票,在选择座位时,会员A可能会多次查询座位的数据,若此时会员B预定了其中一个座位,会员A查询的结果不一致,产生不可重复读现象。为解决这种现象可以把查询和预定活动划分在同一隔离域,并设置域内隔离属性Iβ为串行。
民航综合信息平台中的事务并发控制机制解决了同一事务的多个活动、不同事务实例的不同活动、同一事务的多个实例的并发,该并发机制还能应用于银行、证券等领域。
结束语 Web服务环境放宽了事务的ACID属性,对事务的并发也提出了新的要求。本文提出的隔离域的方案,结合WS-Tx和WS-C规范,解决了分布式事务处理中出现的问题。事务在执行过程中可以灵活定制各自所需的隔离域,提高了事务的并发程度。
本文的方法还存在不足的地方,比如事务模型,如何实现多个事务同时提交。此外,Web服务环境中事务的补偿问题,还需要进一步研究解决。
任怡,吴泉源,等.事务处理研究综述.计算机研究与发展, 2005, 41(10): 1779-1784 IBM, BEA Systems, Microsoft, Arjuna, Hitachi and IONA. Web services atomic transaction, 2006, published at http://download.boulder.ibm.com/ibmdl/pub/software/ dw/specs/ws-tx/WS-AtomicTransaction.pdf IBM, BEA Systems, Microsoft, Arjuna, Hitachi and IONA. Web services business activity framework transaction, 2006, published at http://download.boulder. ibm.com/ibmdl/pub/software/dw/specs/ws-tx/WS-BusinessActivity.pdf IBM, BEA Systems, Microsoft, Arjuna, Hitachi and IONA. Web services coordination 2006, published at http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-tx/WS-Coordination.pdf Jerry Roberts, Krishnamurthy Srinivasan. Tentative Hold Protocol, 2001, published at http://www.w3.org/ TR/20 01/NOTE-tenthold-1-20011128/ Mohammad Alrifai, Peter Dolog, Wolfgang Nejdl. Transactions Concurrency Control in Web Service Environment. Proceedings of the European Conference on Web Services (ECOWS'06), 2006:109-118 Kunyi Luo, Yongjian Wang, et al. Design of a Sequential Tentative Hold Protocol for Efficient Coordination of Web Services Transaction. Proceedings of IEEE International Conference on Networking, Sensing and Control (ICNSC), 2008:1190-1195. 郝丽波,李建华.基于隔离域的事务工作流并发控制.计算机工程与设计, 2008, 29(1):199-202 郑伟峰,徐涛,谷青范. 民航综合信息平台核心服务的设计与实现, 计算机工程, 2008, 34(21):267-269