日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2PC、3PC

發布時間:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2PC、3PC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二階段提交協議(2PC)、三階段提交協議(3PC)都是為了解決分布式一致性問題。

??在分布式系統中為了保證事務處理的ACID特性,引入了協調者組件來同一調度所有分布式節點的執行邏輯,被調度的分布式節點稱為參與者,協調者負責調度參與者的行為,并決定這些參與者是否提交事務。
??

2PC

二階段提交協議將事務的提交過程分成兩個階段來處理:

第一個階段是提交事務請求:

  • 首先協調者向所有參與者發送事務內容,詢問是否可以執行事務提交操作,并等待參與者的響應。
  • 參與者執行事務操作,并將 undo 和 redo 信息記入事務日志中。
  • 如果參與者成功執行了事務操作,就反饋給協調者 yes 響應,表示事務可以執行,否則反饋 no 響應,表示事務不可以執行。

第二個階段是執行事務提交:

  • 協調者根據參與者的反饋情況來決定是否進行事務提交操作, 如果所有參與者反饋的都是 yes 響應,就會執行事務提交

    • 首先協調者向所有參與者發出 commit 請求。
    • 參與者收到 commit 請求后,執行事務提交操作。
    • 參與者完成事務提交后,釋放事務執行期間占用的資源,并向協調者發送 ack 消息。
    • 協調者收到所有參與者反饋的 ack 消息后,完成事務提交。
  • 如果有一個參與者反饋的是 no 響應,或者等待超時后,協調者依然沒有接收到所有參與者的響應,就會中斷事務

    • 協調者向所有參與者發出回滾請求。
    • 參與者收到回滾請求后,利用第一階段中記錄的 undo 信息來執行事務回滾操作。
    • 參與者完成事務回滾后,釋放事務執行期間占用的資源,并向協調者發送 ack 消息。
    • 協調者收到所有參與者反饋的 ack 消息后,完成事務中斷。

優點:原理簡單,實現方便。

缺點:

  • 同步阻塞:所有參與者在等待其它參與者響應時都處于同步阻塞狀態,無法進行其它操作。
  • 單點問題:協調者在 2PC 中起到了非常大的作用,發生故障將會造成很大的影響。尤其是在提交階段,如果發生故障,所有參與者會一直同步阻塞,無法進行其它操作。
  • 數據不一致:在提交階段,如果發生局部網絡異常,或協調者在還沒有發送完 commit 請求前自身崩潰了,會導致只有部分參與者收到了 Commit 請求,也就是說只有部分參與者提交了事務,使得分布式系統出現數據不一致的現象。
  • 太過保守:沒有完善的容錯機制,任意一個節點失敗都會導致整個事務失敗。

  • 3PC

    3PC 是 2PC 的改進版,它將 2PC 的提交事務請求過程分為

    第一個階段是 CanCommit:

    • 協調者向所有參與者發送包含事務內容的 canCommit 請求,詢問是否可以執行事務提交操作,并等待參與者的響應。
    • 參與者收到請求后,如果認為自己可以執行事務,就反饋 yes 響應,進入預備狀態,否則反饋 no 響應。

    第二個階段是 PreCommit:

    • 協調者根據參與者的反饋情況來決定是否進行事務的 PreCommit 操作,如果所有參與者反饋的都是 yes 響應,就會執行事務預提交

      • 協調者向所有參與者發出 PreCommit 請求,并進入準備階段。
      • 參與者收到 PreCommit 請求后,會執行事務操作,并將 undo 和 redo 信息記錄到事務日志中。
      • 參與者完成事務操作后,向協調者發送 ack 消息,并等待最終的指令:提交或中斷。
    • 如果有一個參與者反饋的是 no 響應,或者等待超時后,協調者依然沒有接收到所有參與者的響應,就會中斷事務

      • 協調者向所有參與者發出中斷請求。
      • 參與者收到中止請求或者超時后,都會中斷事務。

    第三個階段是 doCommit:

    • 該階段進行真正的事務提交,存在兩種情況,第一種情況是執行提交

      • 也就是協調者收到了所有參與者的 ack 響應,它從預提交狀態轉換為提交狀態,并向所有參與者發送 doCommit 請求。
      • 參與者收到 doCommit 請求后,正式執行事務提交操作。
      • 參與者完成事務提交后,釋放事務執行期間占用的資源,并向協調者發送 ack 消息。
      • 協調者收到所有參與者反饋的 ack 消息后,完成事務。
    • 第二種情況是中斷事務,也就是如果有一個參與者反饋的是 no 響應,或者等待超時后協調者依然沒有接收到所有參與者的響應,就會中斷事務:

      • 協調者向所有參與者發送中斷請求。
      • 參與者收到中斷請求后,利用第二階段中記錄的 undo 信息來執行事務回滾操作。
      • 參與者完成事務回滾后,釋放事務執行期間占用的資源,并向協調者發送 ack 消息。
      • 協調者收到所有參與者反饋的 ack 消息后,完成事務中斷。

    優點:和 2PC 相比,3PC 最大的優點是降低了參與者的阻塞范圍,并且能夠在出現單點故障后繼續達成一致。

    缺點:在參與者收到 PreCommit 消息后,如果網絡出現分區,協調者和參與者無法正常通信,而參與者依然會進行事務的提交,這會導致數據不一致。

    總結

    以上是生活随笔為你收集整理的2PC、3PC的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。