天天看點

【分布式理論】 之 2PC

文章目錄

  • ​​一、什麼是2PC?​​
  • ​​二、兩階段執行過程​​
  • ​​(1)請求階段(Prepare Phase)​​
  • ​​(2)送出階段(Commit Phase)​​
  • ​​1. 二階段送出算法的前提​​
  • ​​2. 過程​​
  • ​​三、兩階段送出協定可能面臨兩種故障:​​
  • ​​(1)事務參與者發生故障​​
  • ​​(2)協調者發生故障​​
  • ​​四、總結​​

一、什麼是2PC?

兩階段送出(Two-phase Commit, 2PC)算法,經常用來實作分布式事務。

系統包含兩類節點:

  1. 協調者(coordinator)
  2. 事務參與者(participants,cohorts或workers)
每個節點都會記錄記錄檔并持久化到非易失性存儲媒體,即使節點發生故障日志也不會丢失。

二、兩階段執行過程

(1)請求階段(Prepare Phase)

【分布式理論】 之 2PC
  1. 協調者通知事務參與者準備送出或者取消事務,然後進入表決階段
  2. 在表決過程中,參與者将告知協調者自己決策:

    同意(事務參與者本地執行成功)

    取消(事務參與者本地執行失敗)

(2)送出階段(Commit Phase)

【分布式理論】 之 2PC
1. 二階段送出算法的前提

(1)在分布式系統中,存在一個節點作為協調者(Coordinator), 其他節點作為參與者(Cohorts), 且節點之間可以進行網絡通信

(2)所有節點都采用 預寫式日志,且日志被寫入後即保持在可靠的儲存設備上,即使節點損壞,也不會導緻日志資料的消失

(2)所有節點不會永久性損壞,即使損壞,仍然可以恢複

2. 過程
  1. 協調者将基于第一個階段的投票結果進行決策:

    送出 或者 取消

當且僅當所有的參與者同意送出事務,協調者才通知所有的參與者送出事務
  1. 參與者在接收到協調者發來的消息後将執行相應的操作

三、兩階段送出協定可能面臨兩種故障:

(1)事務參與者發生故障

給每個事務設定一個逾時時間,如果某個事務參與者一直不響應,到達逾時時間後整個事務失敗。

(2)協調者發生故障

協調者需要将事務相關資訊記錄到記錄檔并同步到備用協調者,假如協調者發生故障,備用協調者可以接替它完成後續的工作。

如果沒有備用協調者,協調者又發生了永久性故障,事務參與者将無法完成事務而一直等待下去。

四、總結

  1. 兩階段送出協定是阻塞協定
  1. 兩階段送出性能下降的主要原因:
  • 為了防崩潰恢複而做的磁盤I/O(fsync)
  • 額外的網絡往返開銷

繼續閱讀