Two-phase commit(2PC) 協議介紹 (分佈式數據一致性操作)

2PC協議在多數據中心,多路寫的情況下,保證數據一致性而設計的協議。

   2PC思想比較簡單,是一個失敗,全體不成功;如果成功,就沒有一個失敗的簡單邏輯,實現簡單。

   image

   本文講述其大概流程,client提交數據到N個節點上,其中一個節點選爲協調員coordinator,其他作爲cohorts(partcipant)。2PC做了一些假設:

1、  每個節點都有穩定存儲(stable storage), 並且都會每次寫操作都有預寫日誌(write-ahead log);

2、  預寫日誌永遠不會丟失和破壞;

3、  任何節點之間都能互相通信;

4、每個參與者都是blocking的,有資源鎖存在。

 

實現表述畫一個時序流程圖來介紹吧,一目瞭然。

image

        

   一個更詳細的狀態機實現

  clip_image004

 

       上圖中每個節點,每一步都有log記錄,以準備rollback,其中任何一步都有失敗的可能,收不到對方的消息。

     在 phase 1階段,任何錯誤包括超時錯誤,都不會產生任何問題。

在 phase 2階段,如果是coordinator發出global commit後,有個或幾個cohorts失效。就發生了數據不一致的錯誤,存在一些cohorts更新數據,一些cohorts沒有更新數據。但是,coordinator沒有機會向所有cohorts發出global abort撤銷提交。

     在實際生產環境中,2PC很少被使用。一般使用其改進版:如D2PC()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章