CORBA对象事务服务及其并发控制研究

2010-09-27 01:40祁明龙
电子设计工程 2010年1期
关键词:调用事务应用程序

李 浩,祁明龙

(武汉理工大学 计算机学院,湖北 武汉430070)

CORBA对象事务服务及其并发控制研究

李 浩,祁明龙

(武汉理工大学 计算机学院,湖北 武汉430070)

为有效地保证分布式事务的ACID性质以及解决多个客户程序并发访问某一事务所造成的访问冲突,根据CORBA对象事务服务 OTS(Object Transaction Service)、并发控制服务 CCS(Concurrency Control Service)及其提供的相关接口,采用两步提交协议和并发控制锁机制实现。并将两者相结合实现一个账户之间的转账操作,证明其可行性。

CORBA对象事务服务;ACID;两步提交协议;并发控制服务

早期的事务处理多是基于数据库管理系统DBMS(Database Management System),比较简单。随着应用程序的日趋复杂和庞大,一个应用往往要跨越网络中的多个平台,甚至是不同厂商提供的不同产品,即使是一种分布式DBMS,也未必总能满足各种分布式应用需求,因此保证事务在分布的、异构的环境下工作成为迫切问题 。这就要求制定用于规范应用程序与不同资源之间相互协调进行事务处理的标准,以维持事务的ACID性质,即原子性(Aomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。X/Open 提出的分布式事务处理DTP模型就满足这种需求[1]。

由OMG发布的CORBA对象事务服务就是基于DTP而制定的,它支持多个分布式对象通过两步提交2PC(Two-Phase Commit)协议参与1个分布式事务[2]。然而,当有多个并发客户程序访问某一共享资源时,就有可能造成客户程序之间的冲突。为此,CORBA发布并发控制服务CCS(Concurrency Control Serivce)来协调并发事务的活动。本文通过研究事务服务及其并发控制,利用CORBA对象事务服务保证一个分布式事务的ACID性质,利用CORBA并发控制服务为1个事务申请或释放锁,以此协调多个并发事务访问共享资源,最后实现CORBA对象事务服务及其并发控制。

1 CORBA对象事务服务

1.1 对象事务服务模型

所谓事务是指一组操作的集合,该集合能将系统的共享状态从一个一致状态转换到另一个一致状态。其主要特征可概括为ACID,分别表示原子性、一致性、隔离性和持久性。一个事务的结束方式只有2种情况:一是事务提交,相关请求所作的修改具有永久效果;二是事务已回滚,相关请求所作的修改被取消[3]。早期基于DBMS的事务模型由服务程序管理事务,客户程序不参与事务的控制,但在许多分布式应用中,服务程序通常无法全部预知客户程序想做的事情,适用性不够好。为此,引入事务管理器以供客户程序灵活地定义事务的边界,图1是分布式事务处理的抽象模型。

图1 分布式事务处理模型

该模型包括应用程序(AP)、资源管理器(RM)和事务管理器(TM)[4]。其中,应用程序负责定义事务的边界,指定组成事务的操作;资源管理器提供对共享数据的访问;事务管理器用于控制事务的执行过程,协调共享资源之间的关系,并负责处理失败后的恢复工作。资源管理器和事务管理器之间双向通信,实现两者之间的两步提交协议。两步提交协议是指在TM向所有的RM发出正式提交请求前,先询问所有的RM是否已准备好提交,仅当所有RM都给出肯定回答时,TM才发出提交请求;如果有一个RM给出否定的回答,TM就指示所有RM回滚。OMG发布的对象事务服务OTS(Object Transaction Service)基于分布式事务处理模型的,它支持分布式对象通过两步提交协议参与一个分布式事务。该服务提供的接口允许对象不是一起提交所有修改,而是一起回滚所有修改,从而保证分布式事务的ACID性质。

1.2 OTS提供的IDL接口

为了使事务服务更好地融入CORBA框架中,OTS将传统的事务处理接口从基于C语言的过程式风格改进为基于IDL的面向对象风格,提出以下接口[5]:1)Current接口。支持客户程序显示地管理线程与事务的关联,可为大多数应用提供简化的操作,含有 begin()、commit()和 rollback()等方法,开始、提交和回滚一个事务。2)TransactionFactory接口。供发起事务的客户程序创建一个新事务。3)Control接口。控制对象支持应用程序显示地管理或传播事务上下文,其定义的get_terminator()用于返回当前事务的终结对象,get_coordinator()用于返回当前事务的协调对象。4)Terminator接口。定义commit()和 rollback()方法,提供提交或回滚操作,通常由事务发起者调用。5)Coordiantor接口。提供事务参与者调用的操作。6)RecoveryCoordiantor接口。恢复对象在失败时将使用恢复协调对象完成恢复,恢复协调对象通常在注册资源时获取。7)Resource接口。资源对象为完成2PC提供与已注册资源所需的操作。当资源上的2PC开始时,prepare()操作被调用并返回投票结果,即2PC的第1步。commit()和rollback()操作用于提交、回滚,是2PC的第2步。8)Synchronization接口。同步对象是在两步提交协议的前后会收到通知的一种事务型对象。

从OTS1.2版开始不再使用TransactionalObject接口,取代它的是新增的POA策略OTSPolicy(取值为REQUIRES,FORBIDS或ADAPTS)和以该POA策略创建的事务型对象引用,从而应用程序无需为增加事务处理能力而修改原有的IDL接口定义,可更好集中处理业务逻辑。

2 CORBA并发控制服务

并发控制服务 CCS(Concurrency Control Service)支持多个客户程序并发访问共享资源。当多个并发客户访问某一共享资源时,该服务可协调客户程序之间有冲突的活动,从而维持共享资源状态的一致性。

并发控制服务提供事务和非事务2种模式。在事务模式中,由OTS在事务提交或回滚时负责解锁;在非事务模式中,由使用并发控制服务的客户程序决定何时解锁。引入事务模式是为了使OTS能利用并发控制服务提供的接口协调并发事务的活动。并发控制服务保证采用2种不同操作模式的客户程序的串行执行。

并发控制服务利用锁(lock)管理控制共享资源的并发使用。锁代表某一客户程序以特定方式访问某一共享资源的能力,每一个锁都与一个资源和一个客户程序相关联。客户程序必须在访问共享资源之前获取合适的锁,如果多个客户程序访问共享资源的并发行为有可能产生冲突,则由并发控制服务负责避免这些客户程序同时拥有该共享资源的锁。

并发控制服务定义5种适用于不同资源访问类型的锁模式:1)读锁(read)与写锁(write)。 这 2 种最常见的锁模式支持经典的多读出器/单写入器策略。读锁是共享锁,其间无冲突;写锁是独占锁,读锁与写锁之间有冲突,写锁与写锁之间也有冲突。2)升级锁(update)。类似于读锁,但升级锁与升级锁之间有冲突,可看作是一种独占的读锁。3)意图读锁(intention_read)与意图写锁(intention_write),这两种意图锁支持在不同力度加锁。意图读锁与写锁之间有冲突,意图写锁与读锁、写锁、升级锁之间均有冲突。

并发控制服务为应用程序和对象事务实现锁的管理提供一套标准的接口,这些IDL接口定义在模块CosConcurrencyControl中。其定义如下:

在上述定义中,接口LockSetFactory提供的create()和create_transactional()分别用于创建一个普通锁集合与一个事务锁型集合;事务型锁集合的接口为TransactionalLockSet,该接口为一个事务提供申请与释放锁的操作,这些操作需要增加参数current以标识事务。接口LockCoordinator支持CORBA对象事务(OTS)释放一个事务持有的所有锁,当事务提交或回滚时调用该接口提供的操作。

3 ORBA事务服务及其并发控制的实现

CORBA事务服务定义的组件包括事务发起者(transaction originator)、可恢复服务器和事务服务本身。与事务发起者相关 的接口有 TransactionFactory,Control,Terminator 以 及Current。这些接口的使用者都是事务发起者,由其启动一个事务,事务环境将与随后的请求一起传递。在一个事务范围内所调用的对象是可恢复状态的对象,它们由事务发起者直接调用,或被一个或若干个事务对象间接调用。事务发起者利用TransactionFactory对象开始新的顶层事务,此时所创建的Control对象将返回给调用者。通过Control对象访问Terminator对象和Coordinator对象。Terminator对象用确认或回滚操作结束一个事务,而Coordinator对象则显示或隐式地为可恢复服务器所使用。可恢复服务器将资源对象注册到Coordinator对象中,实现由事务服务驱动的两阶段提交协议。

OTS为客户程序提供直接和间接方式管理事务上下文,有显式和隐式2种传播事务方式。间接管理是指客户程序利用Current对象绑定事务上下文与客户程序线程。而直接管理是指客户程序直接操纵事务的控制对象(Control接口)、终结对象(Terminator接口)或协调对象(Coordinator接口)。显式传播是指由客户程序负责管理事务,客户程序将事务上下文作为调用请求的一个参数传播给对象。隐式传播是指由系统负责管理事务传播,调用请求隐式地与客户程序的事务相关联,所有调用请求共享事务上下文。事务的不同上下文管理方式与不同传播方式相结合,可形成客户程序与事务型对象的4种交互方式:1)间接管理/隐式传播;2)直接管理/显式传播;3)直接管理/隐式传播;4)间接管理/显式传播。其中,间接管理/隐式传播是最常见、最简单的方式。这种方式中,客户程序调用Current接口提供的操作创建并控制一个事务,当客户程序发送事务型对象上的调用请求时,与该客户程序线程相关联的事务上下文被隐式的传播给目标对象。

通过上述分析,可利用CORBA对象事务服务来保证一个分布式事务的ACID性质,用CORBA并发事务服务提供的接口及锁模式协调并发事务活动,解决多个客户程序并发访问某一共享资源造成的冲突[6]。以下采用间接管理/隐式传播方式对账户之间的转账操作进行简要说明。主要IDL接口定义:

客户程序的主要操作部分关键代码如下:

在正常提交的情况下,客户程序首先创建并开始一个事务,为了保证事务的并发性,利用CORBA并发控制服务对其进行申请锁的操作,接着资源对象source、target分别向OTS注册资源,当向OTS提交该事务时,OTS会分别向source、target资源对象返回投票结果,如果所有的投票结果均已就绪,则可以进行提交事务,即通过两步提交协议保证该事务的ACID性质,提交事务后执行释放锁的操作,通过申请释放锁的操作避免多个客户程序因访问共享资源引起冲突。

4 结论

CORBA对象事务服务通过两步提交协议很好地解决分布式事务处理,保证一个事务的ACID性质,而CORBA并发控制服务则解决了事务的并发性。另外,还可以进一步对资源的加锁粒度进行研究和细化,以提高程序内在的并发程度,具有广泛应用领域。

[1]朱其亮,郑 斌.CORBA原理及应用[M].北京:北京邮电大学出版社,2001.

[2]Jason Pritchard.COM与CORBA本质与互用[M].北京:清华大学出版社,2002.

[3]OMG.CORBA服务[M].北京:电子工业出版社,2002.

[4]尹 皓.基于CORBA的分布式对象技术研究[D].成都:四川大学,2000.

[5]OMG.CORBA系统结构原理与规范[M].韦乐平,薜居敖,孟洛明,译.北京:电子工业出版社,2000.

[6]Orfali Robert,Harkey Dan.Java 与 CORBA 客户/服务器编程[M].北京:电子工业出版社,2004.

Research of CORBA object transaction service and concurrency control

LI Hao,QI Ming-long
(College of Computer Science,Wuhan University of Technology,Wuhan430070,China)

In order to effectively guarantee the ACID properties of distributed transactions and to solve the conflict caused by a number of clients access to a transaction,according to the CORBA object transaction service,concurrency control and their related interfaces,using respectively two-phase commit protocol and lock mechanism to accomplish them.At last, this paper combining the two to implement the operations of a account,and proves their feasibility.

CORBA object transaction service; ACID; two-phase commit protocol; concurrency control service

TP311

A

1674-6236(2010)01-0014-03

2009-08-17 稿件编号:200908034

李 浩(1984—),男,安徽淮北人,硕士。研究方向:分布式计算。

猜你喜欢
调用事务应用程序
基于分布式事务的门架数据处理系统设计与实现
河湖事务
核电项目物项调用管理的应用研究
删除Win10中自带的应用程序
LabWindows/CVI下基于ActiveX技术的Excel调用
谷歌禁止加密货币应用程序
基于系统调用的恶意软件检测技术研究
SQLServer自治事务实现方案探析
利用RFC技术实现SAP系统接口通信
移动实时环境下的数据一致性研究