劉冉 布輝
摘要:分布式數(shù)據(jù)庫具有可靠性和并行性等優(yōu)點。在實現(xiàn)分布式數(shù)據(jù)庫的過程中需要解決的最關鍵的問題是保證分布式事務的原子性、一致性、隔離性和持久性。兩階段提交協(xié)議可以解決這個問題,但是也存在一些缺陷。研究分布式數(shù)據(jù)庫的事務處理機制,對基本兩階段提交協(xié)議所存在問題做了詳細的分析并提出了一種兩階段提交協(xié)議的改進方案。
關鍵詞:分布式數(shù)據(jù)庫;事務;兩階段提交協(xié)議;阻塞
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)15-3500-03
Research and Improvement of Distributed Database Two-phase Commitment Protocol
LIU Ran,BU Hui
(School of Software, North China University of Water Conservancy and Electric Power,Zhengzhou 450008, China)
Abstract:The distributed database has the advantage of reliability and parallelism. Under the complex environment of distributed database systems, how to guarantee the distributed transaction atomicity, consistency, isolation and durability in the system realization, which are the key problem to solve. Two phase commitment protocol can solve this problem, but there are some defects. This thesis is on research of the distributed database affairs dealing mechanism, analysis of the problems existing in the basic two-phase commitment protocol, and putting forward one improvement program for a two-phase commitment protocol.
Key words: distributed database; affairs; two-phase commitment protocol; blocking
分布式事務具有原子性、一致性、隔離性和持久性。在分布式數(shù)據(jù)庫系統(tǒng)中,分布式事務在各站點中被分解為子事務來執(zhí)行。各子事務或者全部提交,或者全部撤銷,不允許出現(xiàn)部分子事務提交了而其它子事務撤銷的情況。為了達到這個目標,分布式事務處理程序利用兩階段提交協(xié)議來保證分布式事務的ACID特性,使分布式數(shù)據(jù)庫系統(tǒng)具備相當?shù)目煽啃院涂捎眯浴?/p>
1基本兩階段提交協(xié)議(2PC)
在基本2PC協(xié)議中,分布式事務處理程序要任命一個協(xié)調者,該協(xié)調者負責分布式事務的提交或中止。該協(xié)調者一般由分布式事務的始發(fā)站點上的代理者擔任,其它站點上的代理者被稱為分布式事務的參與者,每個參與者負責其局部事務并向協(xié)調者提出提交或中止事務的請求。
基本2PC協(xié)議的基本思想是只有全部子事務均提交的情況下分布式事務才會提交;如果有一個參與者不能提交其子事務則全部子事務都中止。保證所有參與者做出提交或撤銷子事務的統(tǒng)一決定?;?PC協(xié)議由兩個階段組成,第一階段做出提交或撤銷全部子事務的決定,稱之為決策階段;第二階段執(zhí)行第一階段的決定,稱之為執(zhí)行階段。
在基本2PC協(xié)議的第一階段,協(xié)調者給所有的參與者發(fā)消息進入預提交階段,如果參與者就緒了并同意提交,就回答“提交”。在發(fā)送預提交命令之前,協(xié)調者要在日志中寫入預提交記錄以及所有參與者的子事務標識,然后協(xié)調者進入等待回應狀態(tài)并啟動計時器。當一個參與者回答“準備提交”時,要保證在其它站點故障時也能提交子事務。因此,在各子事務所在站點的日志中要記錄以下內容:
1)本站點提交子事務所需的全部運行記錄。
2)該子事務已準備就緒的記錄。
以上兩點保證該子事務的狀態(tài)不受其它站點故障的影響。
在執(zhí)行階段,當協(xié)調者做出決定后,會在日志中寫入“全部提交”或“全部撤銷”記錄。這保證分布式事務會統(tǒng)一提交或撤銷,然后協(xié)調者向所有的參與者發(fā)送“提交”或“撤銷”命令。
所有的參與者根據(jù)協(xié)調者的命令將“提交”或“撤銷”記錄寫入本站點日志中。同時執(zhí)行“提交”或“撤銷”命令并向協(xié)調者發(fā)送“執(zhí)行”消息。
協(xié)調者從所有參與者處收到執(zhí)行消息,在日志中寫入“完成”記錄,至此分布式事務完成。
2基本兩階段提交協(xié)議問題分析
在基本2PC協(xié)議中,參與者在同意提交之前,可以任意終止自己的子事務。而在參與者確定了子事務的提交或撤銷后,就不能再更改它的建議,必須等待協(xié)調者的最終決策。在這個期間,協(xié)調者和參與者都進入相互等待對方發(fā)送消息的狀態(tài),當與協(xié)調者和參與者相關的通信網絡不穩(wěn)定,特別是發(fā)生網絡故障時,就很容易引發(fā)事務處理的非正常阻塞現(xiàn)象,這時該事務所占用的資源長期不能或根本不能釋放,占用其它事務的資源,影響其它事務的處理,降低了系統(tǒng)的工作效率和可靠性。
另外,如圖1所示,協(xié)調者非常關鍵,如果協(xié)調者發(fā)生故障,勢必會對嚴重影響全局事務。協(xié)調者和參與者需要通過網絡傳遞準備提交、建議提交或撤銷、全局提交或撤銷和提交或撤銷信息。當參與者較多時,協(xié)調者要與每一個參與者直接進行通信,處理信息量大,響應時間就會長。這時協(xié)調者就會成為事務處理的瓶頸。網絡也會出現(xiàn)不穩(wěn)定或有故障的現(xiàn)象,由此也會引發(fā)事務處理的非正常阻塞狀態(tài)。
圖1基本2PC協(xié)議站點關系示意圖
由以上分析可見,非正常阻塞是影響基本2PC協(xié)議性能的關鍵因素。如果要提高分布式數(shù)據(jù)庫系統(tǒng)的工作效率和可靠性,就必須降低非正常阻塞的發(fā)生幾率,并盡可能的減少已出現(xiàn)的非正常阻塞對系統(tǒng)的影響。
3兩階段提交協(xié)議的一些改進
為了減輕了協(xié)調站點的負擔,防止協(xié)調者出錯造成事務無法完成,并縮短各子事務并行處理的響應時間,確保協(xié)調者和參與者能夠從非正常阻塞狀態(tài)中退出并終止。本文對基本兩階段提交協(xié)議做了如下改進:
1)提供一個輔助協(xié)調者站點,在協(xié)調者站點出現(xiàn)故障的情況下接替協(xié)調者的職能,完成事務處理。
2)為每個進程設置一個定時器。如果某個進程所期待的消息在計時器超時之前還未到達,就進行超時處理,從而提高分布式數(shù)據(jù)庫系統(tǒng)效率、可靠性和可用性。
改進后的方案中,在進行分布式事務處理時,由系統(tǒng)選定一個協(xié)調者、一個輔助協(xié)調者和完成該事務所需的所有參與者。在第一階段,協(xié)調者向輔助協(xié)調者和所有參與者發(fā)送命令,并將輔助協(xié)調者的地址和所有參與者的地址作為附加信息在命令中一起發(fā)送。協(xié)調者將命令發(fā)出后就立即啟動定時器并進入等待狀態(tài),等待接收參與者發(fā)回的回應消息。如果參與者在收到消息前發(fā)生站點故障,參與者站點會先自行進行故障恢復,如不能恢復,則直接終止全局事務,這樣可以減少無謂事務的提交。如果參與者正常,參與者收到命令后,根據(jù)定時器的時間限制和本地資源情況向本地站點申請進行子事務提交所需的本地資源。如果本地資源符合事務提交條件,則發(fā)送“建議提交”消息,同時啟動定時器,進入等待狀態(tài),等待協(xié)調者發(fā)送全局事務的最終決策;如果參與者沒有申請到足夠的進行子事務提交的本地資源,則向協(xié)調者發(fā)送“建議撤銷”消息,并撤銷本地資源的申請。在第二階段中,協(xié)調者如果在定時器規(guī)定的時間內未能收到所有參與者的消息,則全局事務撤銷;如果協(xié)調者收到所有參與者的消息,則根據(jù)參與者發(fā)過來的消息是提交還是撤銷來做出全局事務的決策。如果收到的參與者發(fā)送的消息均為“建議提交”,則協(xié)調者通過輔助協(xié)調者向所有參與者發(fā)送“全局提交”命令,否則協(xié)調者通過輔助協(xié)調者向那些發(fā)送“建議提交”的參與者發(fā)送“全局撤銷”的命令,同時將上述操作記入日志中。在執(zhí)行階段中,參與者如果在定時器規(guī)定的時間內,收到協(xié)調者關于全局事務的最終決策,則按照協(xié)調者的命令進行相應的事務處理。否則,參與者根據(jù)初始命令報文中的輔助協(xié)調者地址和其它參與站點地址向這些站點詢問協(xié)調者的最終決策,根據(jù)得到的回復來決定提交或撤銷事務。同時將操作確認信息發(fā)送給協(xié)調者。參與者也要將上述操作記入本地日志中,在出現(xiàn)站點故障時用來進行重啟恢復。最后,協(xié)調者等待收到所有參與者發(fā)回的確認信息后再在日志中寫入“事務結束”記錄。
如圖2所示,協(xié)調者向輔助協(xié)調者和各個參與者發(fā)送命令,所有參與者如果正常工作并建議提交,則由輔助協(xié)調者把建議發(fā)送給協(xié)調者。這樣相比于基本2PC協(xié)議中在各站點能正常通信并且無故障的時候確實增加了報文通信,但是當協(xié)調者發(fā)生故障時卻可以保證整個系統(tǒng)的可靠運行。假如協(xié)調者收到各參與者發(fā)來的建議消息后發(fā)生故障時,協(xié)調者無法與輔助協(xié)調者通信,這時輔助協(xié)調者會根據(jù)系統(tǒng)的超時控制機制來確定協(xié)調者出現(xiàn)故障,由于輔助協(xié)調者記錄有所有參與者的建議信息,輔助協(xié)調者可以執(zhí)行協(xié)調者的職能。輔助協(xié)調者在執(zhí)行協(xié)調者職能時協(xié)調者有可能恢復故障,這時系統(tǒng)中就會出現(xiàn)兩個協(xié)調者,為防止這種情況發(fā)生,輔助協(xié)調者首先發(fā)送一條消息給協(xié)調者表示要執(zhí)行協(xié)調者的職能,即使協(xié)調者后來排除故障恢復了,它首先要處理來自輔助協(xié)調者的這條消息,協(xié)調者收到這條消息后就放棄協(xié)調者角色,進入等待狀態(tài)。輔助協(xié)調者根據(jù)剛才收到的所有參與者建議消息作出提交或撤銷事務的決策。當事務結束后,輔助協(xié)調者要發(fā)送一條消息給協(xié)調者表示事務結束,輔助協(xié)調者也就不再執(zhí)行協(xié)調者的職能。如果當輔助協(xié)調者在發(fā)送決策命令后發(fā)生故障,就不能執(zhí)行該事務也不能把事務結束的信息發(fā)給協(xié)調者,系統(tǒng)會根據(jù)超時控制機制判斷輔助協(xié)調者已經發(fā)生故障,這時協(xié)調者如果恢復了就會退出等待狀態(tài),重新執(zhí)行協(xié)調者職能,協(xié)調者也會首先發(fā)送一條消息給輔助協(xié)調者表示要重新執(zhí)行協(xié)調者職能,協(xié)調者會根據(jù)日志記錄重新發(fā)送決策給所有參與者繼續(xù)把事務完成。
圖2 2pc改進方案中各站點關系示意圖
在改進方案中,各參與站點在全局事務發(fā)起前會進行故障檢測,如有站點發(fā)生故障則重啟恢復,避免無用的事務提交。在協(xié)議進行的各個階段普遍采用超時控制機制來檢測故障,防止多個站點出現(xiàn)長時間互相等待,當部分站點出現(xiàn)故障而引發(fā)超時情況時,正常站點可以通過終止程序終結事務,減少因等待導致的阻塞狀況出現(xiàn)。輔助協(xié)調站點的使用減少了協(xié)調站點的負擔,而且在協(xié)調站點發(fā)生故障失效時轉變職能成為新協(xié)調者,使參與者可立即結束等待狀態(tài),從另一方面減少了阻塞情況的出現(xiàn)。
4結束語
基本兩階段提交協(xié)議(2PC)在分布式數(shù)據(jù)庫系統(tǒng)的實現(xiàn)中被廣泛采用,但因其容易引起阻塞狀態(tài)等缺陷而影響系統(tǒng)的工作性能。本文針對基本2PC協(xié)議的實現(xiàn)方法的不足,提出了一個改進方案。這種方案可以有效減少非正常阻塞發(fā)生的幾率并提高分布式數(shù)據(jù)庫系統(tǒng)的性能。
參考文獻:
[1]邵佩英.分布式數(shù)據(jù)庫系統(tǒng)及其應用[M].北京:科學出版社,2000.
[2]熊燕群,白似雪.DDBMS的兩階段提交協(xié)議中阻塞問題的解決方案[J].計算機應用與軟件,2006,23(5).
[3]宋靜,劉心松,賴周建,等.一種改進的2PC協(xié)議及其性能[J].微計算機信息,2006(22):3-4.
[4]趙淑芳.分布式數(shù)據(jù)庫事務處理[J].機械管理開發(fā),2006(4): 33-37.
[5]胡勇,陳炬華.分布式數(shù)據(jù)庫的事務協(xié)議[J].情報雜志,2004(2):23-27.
[6] Weihal Wu,Yan Wang,Cahon Pu.Two Phase Commit Protocol for Self Adapting Service[J].IEEE,2004.