李 浩,祁明龍
(武漢理工大學 計算機學院,湖北 武漢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對象事務服務及其并發控制。
所謂事務是指一組操作的集合,該集合能將系統的共享狀態從一個一致狀態轉換到另一個一致狀態。其主要特征可概括為ACID,分別表示原子性、一致性、隔離性和持久性。一個事務的結束方式只有2種情況:一是事務提交,相關請求所作的修改具有永久效果;二是事務已回滾,相關請求所作的修改被取消[3]。早期基于DBMS的事務模型由服務程序管理事務,客戶程序不參與事務的控制,但在許多分布式應用中,服務程序通常無法全部預知客戶程序想做的事情,適用性不夠好。為此,引入事務管理器以供客戶程序靈活地定義事務的邊界,圖1是分布式事務處理的抽象模型。

圖1 分布式事務處理模型
該模型包括應用程序(AP)、資源管理器(RM)和事務管理器(TM)[4]。其中,應用程序負責定義事務的邊界,指定組成事務的操作;資源管理器提供對共享數據的訪問;事務管理器用于控制事務的執行過程,協調共享資源之間的關系,并負責處理失敗后的恢復工作。資源管理器和事務管理器之間雙向通信,實現兩者之間的兩步提交協議。兩步提交協議是指在TM向所有的RM發出正式提交請求前,先詢問所有的RM是否已準備好提交,僅當所有RM都給出肯定回答時,TM才發出提交請求;如果有一個RM給出否定的回答,TM就指示所有RM回滾。OMG發布的對象事務服務OTS(Object Transaction Service)基于分布式事務處理模型的,它支持分布式對象通過兩步提交協議參與一個分布式事務。該服務提供的接口允許對象不是一起提交所有修改,而是一起回滾所有修改,從而保證分布式事務的ACID性質。
為了使事務服務更好地融入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接口定義,可更好集中處理業務邏輯。
并發控制服務 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)釋放一個事務持有的所有鎖,當事務提交或回滾時調用該接口提供的操作。
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性質,提交事務后執行釋放鎖的操作,通過申請釋放鎖的操作避免多個客戶程序因訪問共享資源引起沖突。
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—),男,安徽淮北人,碩士。研究方向:分布式計算。