李 浩,祁明龍
(武漢理工大學 計算機學院,湖北 武漢430070)
CORBA對象事務服務及其并發(fā)控制研究
李 浩,祁明龍
(武漢理工大學 計算機學院,湖北 武漢430070)
為有效地保證分布式事務的ACID性質(zhì)以及解決多個客戶程序并發(fā)訪問某一事務所造成的訪問沖突,根據(jù)CORBA對象事務服務 OTS(Object Transaction Service)、并發(fā)控制服務 CCS(Concurrency Control Service)及其提供的相關接口,采用兩步提交協(xié)議和并發(fā)控制鎖機制實現(xiàn)。并將兩者相結(jié)合實現(xiàn)一個賬戶之間的轉(zhuǎn)賬操作,證明其可行性。
CORBA對象事務服務;ACID;兩步提交協(xié)議;并發(fā)控制服務
早期的事務處理多是基于數(shù)據(jù)庫管理系統(tǒng)DBMS(Database Management System),比較簡單。隨著應用程序的日趨復雜和龐大,一個應用往往要跨越網(wǎng)絡中的多個平臺,甚至是不同廠商提供的不同產(chǎn)品,即使是一種分布式DBMS,也未必總能滿足各種分布式應用需求,因此保證事務在分布的、異構(gòu)的環(huán)境下工作成為迫切問題 。這就要求制定用于規(guī)范應用程序與不同資源之間相互協(xié)調(diào)進行事務處理的標準,以維持事務的ACID性質(zhì),即原子性(Aomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。X/Open 提出的分布式事務處理DTP模型就滿足這種需求[1]。
由OMG發(fā)布的CORBA對象事務服務就是基于DTP而制定的,它支持多個分布式對象通過兩步提交2PC(Two-Phase Commit)協(xié)議參與1個分布式事務[2]。然而,當有多個并發(fā)客戶程序訪問某一共享資源時,就有可能造成客戶程序之間的沖突。為此,CORBA發(fā)布并發(fā)控制服務CCS(Concurrency Control Serivce)來協(xié)調(diào)并發(fā)事務的活動。本文通過研究事務服務及其并發(fā)控制,利用CORBA對象事務服務保證一個分布式事務的ACID性質(zhì),利用CORBA并發(fā)控制服務為1個事務申請或釋放鎖,以此協(xié)調(diào)多個并發(fā)事務訪問共享資源,最后實現(xiàn)CORBA對象事務服務及其并發(fā)控制。
所謂事務是指一組操作的集合,該集合能將系統(tǒng)的共享狀態(tài)從一個一致狀態(tài)轉(zhuǎn)換到另一個一致狀態(tài)。其主要特征可概括為ACID,分別表示原子性、一致性、隔離性和持久性。一個事務的結(jié)束方式只有2種情況:一是事務提交,相關請求所作的修改具有永久效果;二是事務已回滾,相關請求所作的修改被取消[3]。早期基于DBMS的事務模型由服務程序管理事務,客戶程序不參與事務的控制,但在許多分布式應用中,服務程序通常無法全部預知客戶程序想做的事情,適用性不夠好。為此,引入事務管理器以供客戶程序靈活地定義事務的邊界,圖1是分布式事務處理的抽象模型。
圖1 分布式事務處理模型
該模型包括應用程序(AP)、資源管理器(RM)和事務管理器(TM)[4]。其中,應用程序負責定義事務的邊界,指定組成事務的操作;資源管理器提供對共享數(shù)據(jù)的訪問;事務管理器用于控制事務的執(zhí)行過程,協(xié)調(diào)共享資源之間的關系,并負責處理失敗后的恢復工作。資源管理器和事務管理器之間雙向通信,實現(xiàn)兩者之間的兩步提交協(xié)議。兩步提交協(xié)議是指在TM向所有的RM發(fā)出正式提交請求前,先詢問所有的RM是否已準備好提交,僅當所有RM都給出肯定回答時,TM才發(fā)出提交請求;如果有一個RM給出否定的回答,TM就指示所有RM回滾。OMG發(fā)布的對象事務服務OTS(Object Transaction Service)基于分布式事務處理模型的,它支持分布式對象通過兩步提交協(xié)議參與一個分布式事務。該服務提供的接口允許對象不是一起提交所有修改,而是一起回滾所有修改,從而保證分布式事務的ACID性質(zhì)。
為了使事務服務更好地融入CORBA框架中,OTS將傳統(tǒng)的事務處理接口從基于C語言的過程式風格改進為基于IDL的面向?qū)ο箫L格,提出以下接口[5]:1)Current接口。支持客戶程序顯示地管理線程與事務的關聯(lián),可為大多數(shù)應用提供簡化的操作,含有 begin()、commit()和 rollback()等方法,開始、提交和回滾一個事務。2)TransactionFactory接口。供發(fā)起事務的客戶程序創(chuàng)建一個新事務。3)Control接口。控制對象支持應用程序顯示地管理或傳播事務上下文,其定義的get_terminator()用于返回當前事務的終結(jié)對象,get_coordinator()用于返回當前事務的協(xié)調(diào)對象。4)Terminator接口。定義commit()和 rollback()方法,提供提交或回滾操作,通常由事務發(fā)起者調(diào)用。5)Coordiantor接口。提供事務參與者調(diào)用的操作。6)RecoveryCoordiantor接口?;謴蛯ο笤谑r將使用恢復協(xié)調(diào)對象完成恢復,恢復協(xié)調(diào)對象通常在注冊資源時獲取。7)Resource接口。資源對象為完成2PC提供與已注冊資源所需的操作。當資源上的2PC開始時,prepare()操作被調(diào)用并返回投票結(jié)果,即2PC的第1步。commit()和rollback()操作用于提交、回滾,是2PC的第2步。8)Synchronization接口。同步對象是在兩步提交協(xié)議的前后會收到通知的一種事務型對象。
從OTS1.2版開始不再使用TransactionalObject接口,取代它的是新增的POA策略OTSPolicy(取值為REQUIRES,F(xiàn)ORBIDS或ADAPTS)和以該POA策略創(chuàng)建的事務型對象引用,從而應用程序無需為增加事務處理能力而修改原有的IDL接口定義,可更好集中處理業(yè)務邏輯。
并發(fā)控制服務 CCS(Concurrency Control Service)支持多個客戶程序并發(fā)訪問共享資源。當多個并發(fā)客戶訪問某一共享資源時,該服務可協(xié)調(diào)客戶程序之間有沖突的活動,從而維持共享資源狀態(tài)的一致性。
并發(fā)控制服務提供事務和非事務2種模式。在事務模式中,由OTS在事務提交或回滾時負責解鎖;在非事務模式中,由使用并發(fā)控制服務的客戶程序決定何時解鎖。引入事務模式是為了使OTS能利用并發(fā)控制服務提供的接口協(xié)調(diào)并發(fā)事務的活動。并發(fā)控制服務保證采用2種不同操作模式的客戶程序的串行執(zhí)行。
并發(fā)控制服務利用鎖(lock)管理控制共享資源的并發(fā)使用。鎖代表某一客戶程序以特定方式訪問某一共享資源的能力,每一個鎖都與一個資源和一個客戶程序相關聯(lián)??蛻舫绦虮仨氃谠L問共享資源之前獲取合適的鎖,如果多個客戶程序訪問共享資源的并發(fā)行為有可能產(chǎn)生沖突,則由并發(fā)控制服務負責避免這些客戶程序同時擁有該共享資源的鎖。
并發(fā)控制服務定義5種適用于不同資源訪問類型的鎖模式:1)讀鎖(read)與寫鎖(write)。 這 2 種最常見的鎖模式支持經(jīng)典的多讀出器/單寫入器策略。讀鎖是共享鎖,其間無沖突;寫鎖是獨占鎖,讀鎖與寫鎖之間有沖突,寫鎖與寫鎖之間也有沖突。2)升級鎖(update)。類似于讀鎖,但升級鎖與升級鎖之間有沖突,可看作是一種獨占的讀鎖。3)意圖讀鎖(intention_read)與意圖寫鎖(intention_write),這兩種意圖鎖支持在不同力度加鎖。意圖讀鎖與寫鎖之間有沖突,意圖寫鎖與讀鎖、寫鎖、升級鎖之間均有沖突。
并發(fā)控制服務為應用程序和對象事務實現(xiàn)鎖的管理提供一套標準的接口,這些IDL接口定義在模塊CosConcurrencyControl中。其定義如下:
在上述定義中,接口LockSetFactory提供的create()和create_transactional()分別用于創(chuàng)建一個普通鎖集合與一個事務鎖型集合;事務型鎖集合的接口為TransactionalLockSet,該接口為一個事務提供申請與釋放鎖的操作,這些操作需要增加參數(shù)current以標識事務。接口LockCoordinator支持CORBA對象事務(OTS)釋放一個事務持有的所有鎖,當事務提交或回滾時調(diào)用該接口提供的操作。
CORBA事務服務定義的組件包括事務發(fā)起者(transaction originator)、可恢復服務器和事務服務本身。與事務發(fā)起者相關 的接口有 TransactionFactory,Control,Terminator 以 及Current。這些接口的使用者都是事務發(fā)起者,由其啟動一個事務,事務環(huán)境將與隨后的請求一起傳遞。在一個事務范圍內(nèi)所調(diào)用的對象是可恢復狀態(tài)的對象,它們由事務發(fā)起者直接調(diào)用,或被一個或若干個事務對象間接調(diào)用。事務發(fā)起者利用TransactionFactory對象開始新的頂層事務,此時所創(chuàng)建的Control對象將返回給調(diào)用者。通過Control對象訪問Terminator對象和Coordinator對象。Terminator對象用確認或回滾操作結(jié)束一個事務,而Coordinator對象則顯示或隱式地為可恢復服務器所使用。可恢復服務器將資源對象注冊到Coordinator對象中,實現(xiàn)由事務服務驅(qū)動的兩階段提交協(xié)議。
OTS為客戶程序提供直接和間接方式管理事務上下文,有顯式和隱式2種傳播事務方式。間接管理是指客戶程序利用Current對象綁定事務上下文與客戶程序線程。而直接管理是指客戶程序直接操縱事務的控制對象(Control接口)、終結(jié)對象(Terminator接口)或協(xié)調(diào)對象(Coordinator接口)。顯式傳播是指由客戶程序負責管理事務,客戶程序?qū)⑹聞丈舷挛淖鳛檎{(diào)用請求的一個參數(shù)傳播給對象。隱式傳播是指由系統(tǒng)負責管理事務傳播,調(diào)用請求隱式地與客戶程序的事務相關聯(lián),所有調(diào)用請求共享事務上下文。事務的不同上下文管理方式與不同傳播方式相結(jié)合,可形成客戶程序與事務型對象的4種交互方式:1)間接管理/隱式傳播;2)直接管理/顯式傳播;3)直接管理/隱式傳播;4)間接管理/顯式傳播。其中,間接管理/隱式傳播是最常見、最簡單的方式。這種方式中,客戶程序調(diào)用Current接口提供的操作創(chuàng)建并控制一個事務,當客戶程序發(fā)送事務型對象上的調(diào)用請求時,與該客戶程序線程相關聯(lián)的事務上下文被隱式的傳播給目標對象。
通過上述分析,可利用CORBA對象事務服務來保證一個分布式事務的ACID性質(zhì),用CORBA并發(fā)事務服務提供的接口及鎖模式協(xié)調(diào)并發(fā)事務活動,解決多個客戶程序并發(fā)訪問某一共享資源造成的沖突[6]。以下采用間接管理/隱式傳播方式對賬戶之間的轉(zhuǎn)賬操作進行簡要說明。主要IDL接口定義:
客戶程序的主要操作部分關鍵代碼如下:
在正常提交的情況下,客戶程序首先創(chuàng)建并開始一個事務,為了保證事務的并發(fā)性,利用CORBA并發(fā)控制服務對其進行申請鎖的操作,接著資源對象source、target分別向OTS注冊資源,當向OTS提交該事務時,OTS會分別向source、target資源對象返回投票結(jié)果,如果所有的投票結(jié)果均已就緒,則可以進行提交事務,即通過兩步提交協(xié)議保證該事務的ACID性質(zhì),提交事務后執(zhí)行釋放鎖的操作,通過申請釋放鎖的操作避免多個客戶程序因訪問共享資源引起沖突。
CORBA對象事務服務通過兩步提交協(xié)議很好地解決分布式事務處理,保證一個事務的ACID性質(zhì),而CORBA并發(fā)控制服務則解決了事務的并發(fā)性。另外,還可以進一步對資源的加鎖粒度進行研究和細化,以提高程序內(nèi)在的并發(fā)程度,具有廣泛應用領域。
[1]朱其亮,鄭 斌.CORBA原理及應用[M].北京:北京郵電大學出版社,2001.
[2]Jason Pritchard.COM與CORBA本質(zhì)與互用[M].北京:清華大學出版社,2002.
[3]OMG.CORBA服務[M].北京:電子工業(yè)出版社,2002.
[4]尹 皓.基于CORBA的分布式對象技術研究[D].成都:四川大學,2000.
[5]OMG.CORBA系統(tǒng)結(jié)構(gòu)原理與規(guī)范[M].韋樂平,薜居敖,孟洛明,譯.北京:電子工業(yè)出版社,2000.
[6]Orfali Robert,Harkey Dan.Java 與 CORBA 客戶/服務器編程[M].北京:電子工業(yè)出版社,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—),男,安徽淮北人,碩士。研究方向:分布式計算。