天天看點

分布式系統的事務處理:2PC與3PC的演化與挑戰

作者:玄明Hanko

#挑戰30天在頭條寫日記#

在傳統的單體應用中,事務管理相對較為簡單,可以通過資料庫事務來實作資料的一緻性。然而,随着系統的拆分和分布式架構的應用,跨多個服務的事務操作變得更為複雜。這就引出了分布式事務的概念,它是保證分布式系統資料一緻性的關鍵。

1、基于XA協定

在分布式系統中,多個事務同時進行并涉及多個資料庫或資料總管(RM)時,需要確定資料的一緻性。XA協定是一種常見的分布式事務管理協定,它提供了一種可靠的機制來協調并保證分布式事務的正确執行。XA協定提供了兩種主要的送出政策:兩階段送出和三階段送出。本文将深入探讨這兩種政策的原理和特點,以及它們在實際應用中的使用。

分布式系統的事務處理:2PC與3PC的演化與挑戰

2、兩階段送出協定(2PC)

兩階段送出協定用于保證分布式事務的原子性,即所有的參與節點或者全部都執行或者全部不執行,其執行過程主要分為兩個階段:

第一階段,準備階段;第二階段,送出階段。

分布式系統的事務處理:2PC與3PC的演化與挑戰

1)準備階段

協調者為每個參與者都發送prepare消息,每個參與者進行表決,傳回同意或取消。預執行本地事務,資源阻塞,但不送出事務。

2)送出階段

協調者基于每個參與者準備階段的表決,當且僅當所有參與者同意送出,協調者才通知所有的參與者送出事務,否則協調者将通知所有的參與者取消事務。

3、三階段送出協定(3PC)

三階段送出協定在協調者和參與者中都引入逾時機制,并且把兩階段送出協定的第一個階段拆分成了兩步:詢問,然後再鎖資源,最後真正送出。

分布式系統的事務處理:2PC與3PC的演化與挑戰

三個階段的執行

  1. CanCommit階段

    協調者向參與者發送CanCommit請求,參與者如果可以送出,就傳回Yes響應,否則傳回No響應。

  2. PreCommit階段

    協調者根據參與者的反應情況來決定是否可以繼續事務的PreCommit操作。

  3. DoCommit階段

協調者基于每個參與者PreCommit階段的回報結果,決定真正送出事務,還是中斷事務。

3、2PC與3PC對比

分布式系統的事務處理:2PC與3PC的演化與挑戰
2PC 3PC
逾時 協調者可設定逾時 協調者、參與者均可設定逾時
阻塞 進入詢問後阻塞所有節點 第一階段緩沖,通過後第二階段才阻塞
一緻性 節點異常會發生不一緻性 節點異常會發生不一緻性

在分布式系統中,2PC(兩階段送出)和3PC(三階段送出)是兩種常見的事務協定,用于確定分布式事務的一緻性。下面是它們之間的對比:

  1. 階段數不同:2PC隻有兩個階段,即準備階段和送出階段;而3PC有三個階段,即準備階段、預送出階段和正式送出階段。
  2. 逾時機制不同:2PC沒有逾時機制,一旦進入等待狀态,參與者将一直等待直到收到響應;而3PC引入了逾時機制,如果在規定的時間内沒有收到大多數參與者的響應,則會復原事務。
  3. 2PC和3PC都有可能發生阻塞情況,但是3PC相對于2PC來說更容易避免阻塞情況的發生。
  4. 2PC 和 3PC 都無法完美解決分布式資料一緻性問題,雖然無法保證事務ACID特性,但解決問題的思想在很多實際架構中有着廣泛應用。
  5. 可用性不同:由于3PC引入了預送出和正式送出兩個階段,是以在網絡分區等異常情況下,可以更好地處理節點故障等問題,提高了系統的可用性和可靠性。
  6. 實作複雜度不同:由于3PC需要更多的資源和時間來實作,是以相對于2PC來說,實作起來更加複雜。

==============================

如果文章對你有幫助,請不要忘記加個關注、點個贊!

繼續閱讀