分布式事務2PC協議

2021-09-12 07:46:00 字數 1602 閱讀 2106

two-phase commit protocol

在事務處理,資料庫,計算機網路中,兩階段提交(2pc)是一種原子提交協議。它是一種分布式演算法,協調參與分布式原子事務的所有程序,決定是提交事務還是中止(回滾)事務(它是一種協商一致性協議)。該協議即使在許多臨時系統故障(包括程序、網路節點、通訊等故障)的情況下也能達到其目的,因此得到了廣泛的應用。然而,它並不是對所有可能的故障配置都具有彈性,並且在極少數情況下,需要手動干預來糾正結果。為了適應從失敗中恢復(在大多數情況下是自動恢復),協議的參與者使用協議狀態的日誌記錄。日誌記錄由協議的恢復過程使用,生成日誌記錄通常比較慢,但是在失敗後仍然存在。存在許多協議變體,它們主要不同於日誌記錄策略和恢復機制。雖然通常不經常使用,但是恢復過程構成該協議的很大一部分。

在任何單一分布式事務的「正常執行」中(即,當沒有發生故障時(這通常是最常見的情況),協議由兩個階段組成:

協議的工作方式如下:乙個節點是指定的協調器(即master),網路中的其他節點被指定為參與者。該協議假設每個節點上都有乙個穩定的儲存,每個節點都有乙個寫write-ahead log,沒有節點永久崩潰,write-ahead log中的資料不會在崩潰中丟失或損壞,並且任何兩個節點都可以彼此通訊。最後乙個假設不是太嚴格,因為網路通訊通常可以重路由。前兩個假設要有力得多;如果乙個節點被完全銷毀,那麼資料就可能丟失。

message flow

coordinator                                         participant

query to commit

-------------------------------->

vote yes/no prepare*/abort*

<-------------------------------

commit*/abort* commit/rollback

-------------------------------->

acknowledgment commit*/abort*

<--------------------------------

end

優點:原理簡單,實現方便

缺點:(1)同步阻塞

在二階段提交的過程中,所以參與事務操作的邏輯都處於阻塞狀態,即各個參與這在等待其他參與者響應的過程中,將無法進行其他任何操作。

(2)單點問題

如果協調者出現問題整個階段的提交流程將無法運轉,特別是如果協調者在階段二**現問題的話,那麼其他參與者將會一直處於鎖定事務資源的狀態中。

(3)資料不一致

在階段二,當協調者向所以參與者傳送commit請求後,發生了區域性網路異常或者在尚未傳送完commit請求之前自身奔潰了,導致最終只有部分參與者收到了commit請求。於是,收到了commit請求的部分參與者會進行事務提交,二沒有收到commit請求的部分參與者一直不進行事務提交,於是整個分布式系統出現了資料不一致的現象。

(4)太過保守

只要有乙個參與者出現故障導致協調者沒有收到所有參與者的響應,協調者就依靠自身的超時機制來發起中止事務請求。即沒有設定較為完善的容錯機制,任意乙個參與者失敗都會導致整個事務的失敗。

參考:

分布式理論 三 2PC協議

由於base理論需要在一致性和可用性方面做出權衡,因此湧現了很多關於一致性的演算法和協議。其中比較著名的有二階提交協議 2 phase commitment protocol 三階提交協議 3 phase commitment protocol 和paxos演算法。本文要介紹的2pc協議,分為兩個階...

分布式理論(三)2PC協議

2pc two phase commit二階段提交協議 2pc是在計算機網路以及資料庫領域內,為了使基於分布式系統架構下的所有節點在進行事務的提交時,保持一致性而設計的一種演算法。通常,二階段提交也被稱為是一種協議。在分布式系統中,每個節點雖然可以知曉自己的操作是否成功,但無法知道其他節點的操作是否...

分布式場景之剛性事務 2PC詳解

分布式一致性 分布式場景下,多個服務同時對服務乙個流程,比如電商下單場景,需要支付服務進行支付 庫存服務扣減庫存 訂單服務進行訂單生成 物流服務更新物流資訊等。如果某乙個服務執行失敗,或者網路不通引起的請求丟失,那麼整個系統可能出現資料不一致的原因。上述場景就是分布式一致性問題,追根到底,分布式一致...