2 PC 有它,你就夠了!

微信公衆號:小林玩大數據
作者:林中鳥
如果你覺得此篇文章對你有幫助,歡迎點贊!

一致性協議概述

Two-Phase-Commit(2PC)

一致性協議概述

在分佈式系統中,每一個機器節點雖然都能明確地知道自己在進行事務過程中的結果是成功或失敗,但卻無法獲得其它節點的操作結果。因此,爲了保持事務處理的 ACID 特性,就需要引入一個稱爲“協調者”的組件來統一調度所有分佈式節點的執行邏輯,這些被調度的分佈式節點被稱爲“參與者”。協調者負責調度參與者的行爲,並最終決定這些參與者把事務真正進行提交。

 

Two-Phase-Commit(2PC)

二階段提交協議是將事務的提交過程分成了兩個階段來進行處理,其執行流程如下:

  • 階段一:提交事務請求
  1. 事務詢問
    協調者向所有的參與者發送事務內容,詢問是否可以執行事務提交操作,並開始等待各參與者的響應
  2. 執行事務
    各參與者節點執行事務操作,並將 Undo 和 Redo 信息記入事務日誌中。
  3. 各參與者向協調者反饋事務詢問的響應
    如果參與者成功執行了事務操作,那麼就反饋給協調者 Yes 響應,表示事務可以執行;如果參與者沒有成功執行事務那麼就反饋給協調者 No 響應,表示事務不可以執行。

注:二階段提交協議階段一被稱爲“投票階段”,即各參與者投票表明是否要繼續執行接下去的事務提交操作。

  • 階段二:執行事務提交
    在階段二中,協調者會根據參與者的反饋情況來最終決定是否可以進行事務提交操作,正常情況下,包含以下兩種可能:

-執行事務提交
假如協調者從所有的參與者獲得的反饋都是 Yes 響應,那麼就會執行事務提交,即事務請求成功。

  1. 發送提交請求
    協調者向所有參與者節點發出 Commit 請求。
  2. 事務提交
    參與者接收到 Commit 請求後,會正式執行事務提交操作,並在完成提交之後釋放在整個事務執行期間佔用的事務資源。
  3. 反饋事務提交結果
    參與者在完成事務提交之後,向協調者發送 Ack 消息。
  4. 完成事務
    協調者接收到所有參與者反饋的 Ack 消息後,完成事務
                                    

-中斷事務
假如任何一個參與者向協調者反饋了 No 響應,或者在等待超時之後,協調者尚無法接收到所有參與的反饋響應,那麼就會中斷事務。

  1. 發送回滾請求
    協調者向所有參與者節點發出 Rollback 請求。
  2. 事務回滾
    參與者接收到 Rollback 請求後,會利用其在階段一中記錄的 Undo 信息來執行事務回滾操作,並在完成回滾之後釋放在整個事務執行期間佔用的資源。
  3. 反饋事務回滾結果
    參與者在完成事務回滾之後,向協調者發送 Ack 消息。
  4. 中斷事務
    協調者接收到所有參與者反饋的 Ack 消息後,完成事務中斷。

注:總的來說,二階段提交將一個事務的處理過程分爲了投票和執行兩個階段,其核心是對每個事務都採用先嚐試後提交的處理方式,因此二階段提交看作一個強一致性的算法。

時間最擅長不辭而別,一轉眼,初夏的5月打馬而過!5月再見啦,6月,希望林中鳥兒們遇見陽光且溫柔的自己!如果本文對你有幫助,請掃一掃關注!

小林玩大數據

               小林玩大數據

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