3.一致性協議 2PC協議(ZooKeeper手記)

2PC和3PC來歷

在分佈式系統中,每個機器節點都能明確知道,本身在進行的事務操做是否成功(能夠理解爲單機操做),可是卻沒法直接獲取到其餘分佈式節點的操做結果。所以,當一個事務操做須要跨越多個分佈式節點的時候,爲了保持事務處理的ACID特性,就須要引入一個稱爲「協調者」的組件來統一調度全部分佈式節點的執行邏輯,咱們把他稱做「參與者」。基於這個思想,衍生了2PC和3PC的兩種協議。分佈式

1. 2PC(Two-Phase Commit)二階段提交

  • 階段一:提交事務請求ide

    • 事務詢問。
      協調者向全部的參與者發送事務內容,詢問是否能夠執行事務提交操做,並開始等待各參與者的響應。
    • 執行事務
      各參與者執行事務操做,並將undo和redo信息記入事務日誌中。
    • 各參與者向協調者反饋事務詢問的響應
      若是參與者成功執行了事務操做,那麼反饋給協調者Yes響應,反之反饋No響應。
  • 階段二:執行事務提交 (階段一反饋的結果都是Yes)日誌

    • 發送提交請求
      協調者向全部參與者節點發出Commit請求。
    • 事務提交
      參與者接收到Commit請求後,會正式執行事務提交操做。
    • 反饋事務提交結果
      參與者在完成事務提交以後,向協調者發送ACK消息。
    • 完成事務
      協調者接受到全部參與者反饋的ACK消息後,完成事務。
  • 階段二:中斷事務 (階段一反饋的結果有No或者有超時狀況)事務

    • 發送回滾請求
      協調者向全部參與者節點發出RollBack請求。
    • 事務回滾
      參與者接收到RollBack請求後,利用階段一中undo信息來執行事務回滾操做。
    • 反饋事務回滾結果
      參與者在完成事務回滾以後,向協調者發送ACK消息。
    • 中斷事務
      協調者接受到全部參與者反饋的ACK消息後,完成事務中斷。
  • 優勢
    原理簡單,實現方便。
  • 缺點
    • 同步阻塞
    • 單點問題
    • 數據不一致
    • 太過保守
相關文章
相關標籤/搜索