兩階段提交

2021-09-11 20:56:53 字數 1394 閱讀 1123

翻譯自:

不像在本地資料庫的事務,分布式資料庫涉及到在多個資料庫中改變資料,因此,分布式事務處理更加複雜,因為資料庫間必須協調保證整個事務的原子性,即要不全部成功,要不全部失敗。

事務一旦提交,無法回滾

資料保證資料的完整性的方式是使用兩階段提交(xa transaction),第一階段稱為準備階段,事務協調器(也稱初始節點)詢問參與本次事務的資料庫是否保證本次事務中歸它們管的部分能夠保證原子性,即如果事務失敗,它們能夠回滾。

所有參與分布式事務的節點執行相同的動作,它們或者全部提交或者全部回滾。資料庫能夠保證這一點通常不需要應用編寫者做任何事情。

phase description階段

描述prepare phase(準備階段)

.全域性協調者詢問相關節點(除了事務提交點或事務發起者)是否能保證原子性,即使有故障,全域性回滾不會在它們那一環節失敗。

commit phase(提交階段)

如果所有的參與者都回應全域性協調者說能,然後協調者就會讓事務發起者提交事務,事務提交後,協調者要求所有參與節點也提交事務。

準備階段參與者節點收到全域性協調者的詢問,會做如下動作:

日誌(redo log)裡面記錄此次事務元資訊,以備回滾

鎖住表,防止讀

當然,參與者節點只是被動地去接收回滾或者成功的請求,而不主動做決定。

當然參與者節點收到詢問會給事務協調者響應,分三種,本次事務不涉及本資料庫更改返回read-only.

事務協調者,全域性協調者指的都是乙個意思

事務協調者要求提交者節點提交

提交者節點提交

提交者節點通知事務協調者已經提交

全域性協調者和本地協調者(提交者節點)要求所有節點提交事務(屬於各自部分)

所有節點提交屬於自己部分的事務並釋放表鎖

本文所有事務狀態資訊都記入redo log

記錄redo log日誌表示事務已經提交

優點當然是傳統db只支援在單個資料庫上執行事務,而xa 2pc協議支援在多個資料庫上執行事務

缺點是2pc是阻塞式的,參與全域性事務的資料庫被動聽從事務管理器的命令,執行或放棄事務,如果執行事務管理器的機器宕機,那整個系統就不能用了。

另外還可能影響其他系統,如果事務管理器掛了,但是這個資料庫的表鎖還沒釋放,因為資料庫還在等待事務管理器的命令,因此,使用這個資料庫的其他應用也會收到影響。

兩階段提交

1 二階段提交協議 一般分為協調器c和若干事務執行者si兩種角色 當執行某一事務t的所有站點si都通知c事務執行完成,c即啟動二階段提交協議。1.首先c向所有si發訊息 c先將訊息寫到本機日誌 si收到訊息後,根據本機t的執 況,如果成功返回,不成功返回。返回前都應把要返回的訊息寫到日誌裡 2.c收...

兩階段提交

在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資料庫的完整性約束實現的,永...

兩階段提交事務

2pc two phase commitment protocol 兩階段提交協議 實現分布式事務的關鍵就是兩階段提交協議。在此協議中,乙個或多個資源管理器的活動均由乙個稱為事務協調器的單獨軟體元件來控制。此協議中的五個步驟如下 應用程式呼叫事務協調器中的提交方法。事務協調器將聯絡事務中涉及的每個資...