分布式數據庫事務

jopen 9年前發布 | 10K 次閱讀 事務

 

在分布式數據庫環境中,一個數據庫事務可以更新多個場地上的數據,這種數據庫事務稱為分布式事務。

 

分布式事務必須滿足傳統事務的特性,即原子性,一致性,分離性和持久性。但是分布式事務處理過程中,某些場地(Server)可能發生故障,或 者由于網絡發生故障而無法訪問到某些場地。為了防止分布式系統部分失敗時產生數據的不一致性。在分布式事務的控制中采用了兩階段提交協議(Two- Phase Commit Protocol)。即事務的提交分為兩個階段:

預提交階段(Pre-Commit Phase)
決策后階段(Post-Decision Phase)

兩階段提交用來協調參與一個更新中的多個服務器的活動,以防止分布式系統部分失敗時產生數據的不一致性。例如,如果一個更新操作要求位于三個不同結點上的記錄被改變,且其中只要有一個結點失敗,另外兩個結點必須檢測到這個失敗并取消它們所做的改變。

為了支持兩階段提交,一個分布式更新事務中涉及到的服務器必須能夠相互通信。一般來說一個服務器會被指定為"控制"或"提交"服務器并監控來自其它服務器的信息。

在分布式更新期間,各服務器首先標志它們已經完成(但未提交)指定給它們的分布式事務的那一部分,并準備提交(以使它們的更新部分成為永久性的)。這是兩階段提交的第一階段。如果有一結點不能響應,那么控制服務器要指示其它結點撤消分布式事務的各個部分的影響。如果所有結點都回答準備好提交,控制服務器則指示它們提交并等待它們的響應。等待確認信息階段是第二階段。在接收到可以提交指示后,每個服務器提交分布式事務中屬于自己的那一部分,并給控制服務器 發回提交完成信息。


在一個分布式事務中,必須有一個場地的Server作為協調者(coordinator),它能向 其它場地的Server發出請求,并對它們的回答作出響應,由它來控制一個分布式事務的提交或撤消。該分布式事務中涉及到的其它場地的Server稱為參 與者(Participant)。

事務兩階段提交的過程如下:
● 兩階段提交在應用程序向協調者發出一個提交命令時被啟動。這時提交進入第一階段,即預提交階段。在這一階段中:
(1) 協調者準備局部(即在本地)提交并在日志中寫入"預提交"日志項,并包含有該事務的所有參與者的名字。
(2) 協調者詢問參與者能否提交該事務。一個參與者可能由于多種原因不能提交。例如,該Server提供的約束條件(Constraints)的延遲檢查不符合限制條件時,不能提交;參與者本身的Server進程或硬件發生故障,不能提交;或者協調者訪問不到某參與者(網絡故障),這時協調者都認為是收到了一個 否定的回答。
(3) 如果參與者能夠提交,則在其本身的日志中寫入"準備提交"日志項,該日志項立即寫入硬盤,然后給協調者發回一?quot;已準備好提交"的回答。
(4) 協調者等待所有參與者的回答,如果有參與者發回否定的回答,則協調者撤消該事務并給所有參與者發出一個"撤消該事務"的消息,結束該分布式事務,撤消該事務的所有影響。

● 如果所有的參與者都送回"已準備好提交"的消息,則該事務的提交進入第二階段,即決策后提交階段。在這一階段中:
(1) 協調者在日志中寫入"提交"日志項,并立即寫入硬盤。
(2) 協調者向參與者發出"提交該事務"的命令。各參與者接到該命令后,在各自的日志中寫入"提交"日志項,并立即寫入硬盤。然后送回"已提交"的消息,釋放該事務占用的資源。 
(3) 當所有的參與者都送回"已提交"的消息后,協調者在日志中寫入"事務提交完成"日志項,釋放協調者占用的資源 。這樣,完成了該分布式事務的提交。
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!