2pc和3pc區別

2pc和3pc區別網絡

 

3pc背景:
    2pc協議在協調者和執行者同時宕機時(協調者和執行者不一樣時宕機時,都能肯定事務狀態),選出協調者以後 沒法肯定事務狀態,會等待宕機者恢復纔會繼續執行(沒法利用定時器來作超時處理,超時後也不知道事務狀態,沒法處理,強制處理會致使數據不一致),這段時間這個事務是阻塞的,其佔用的資源不會被釋放。爲了解決這個問題,產生了3PC協議。設計


原理:
    3PC增長了一箇中間狀態,方便判斷事務狀態,新的協調者不用等宕機者恢復 就能決定事務狀態,準確的提交事務或者終止事務。
    1.CanCommit(可否提交)

    2.PreCommit(預提交)
    進入這個狀態,說明各執行節點的狀態都是canCommit
    3.doCommit(預提交)
    進入這個狀態,說明個執行節點的狀態都是precommit

    新協調者若是發現有的存活節點的狀態是preCommit或doCommit,說明各執行節點的狀態確定都是"能夠提交",協調者直接提交事務,能保證數據一致性 。
               若是發現有的存活節點狀態是abort狀態,說明事務被中斷了,協調者繼續中斷事務就行。
               若是發現全部節點都是canCommit,說明各執行節點不會有處於doCommit狀態(由於若是有節點是canCommit,不會有節點是canCommit狀態),協調者中斷事務,能保證數據一致性。事務

結論:資源

    3pc解決了事務狀態不可知的問題。不過其對執行者引入超時機制(超時後根據執行器當前狀態canCommit or preCommit回滾或者提交事務,釋放事務佔用的資源),若是發生網絡分區,會致使事務數據不一致,雖然提高了系統可用性,不過犧牲了系統一致性,執行者超時這個設計很差。
it

    2pc 3pc歸根究竟是選擇系統可用性仍是選擇系統一致性(CAP理論中的抉擇問題)原理

    2pc 一致性好、可用性較低,3pc 一致性較低、可用性高定時器

相關文章
相關標籤/搜索