兩階段提交(2PC)?
兩階段提交(2PC)
第一階段:協調者詢問參與者事務是否執行成功,參與者發回事務執行結果,這一階段的協調者有超時機制,假設因為網路原因沒有收到某參與者的回應或某參與者掛了,那么超時后就會判斷事務失敗,向所有參與者發送回滾命令,
第二階段:如果事務在每個參與者上都執行成功,事務協調者才發送通知讓參與者提交事務;否則,協調者發送通知讓參與者回滾事務,這一階段的協調者的沒法超時,只能不斷重試,
協調者是一個單點,存在單點故障問題,
假設協調者在發送準備命令之前掛了,還行等于事務還沒開始,
假設協調者在發送準備命令之后掛了,這就不太行了,有些參與者等于都執行了處于事務資源鎖定的狀態,不僅事務執行不下去,還會因為鎖定了一些公共資源而阻塞系統其它操作,
假設協調者在發送回滾事務命令之前掛了,那么事務也是執行不下去,且在第一階段那些準備成功參與者都阻塞著,
假設協調者在發送回滾事務命令之后掛了,這個還行,至少命令發出去了,很大的概率都會回滾成功,資源都會釋放,但是如果出現網路磁區問題,某些參與者將因為收不到命令而阻塞著,
假設協調者在發送提交事務命令之前掛了,這個不行,傻了!這下是所有資源都阻塞著,
假設協調者在發送提交事務命令之后掛了,這個還行,也是至少命令發出去了,很大概率都會提交成功,然后釋放資源,但是如果出現網路磁區問題某些參與者將因為收不到命令而阻塞著,
存在的缺點:
同步阻塞 所有事務參與者在等待其它參與者回應的時候都處于同步阻塞狀態,無法進行其它操作,
單點問題 協調者在 2PC 中起到非常大的作用,發生故障將會造成很大影響,特別是在階段二發生故障,所有參與者會一直等待狀態,無法完成其它操作,
資料不一致 在階段二,如果協調者只發送了部分 Commit 訊息,此時網路發生例外,那么只有部分參與者接收到 Commit 訊息,也就是說只有部分參與者提交了事務,使得系統資料不一致,
太過保守 任意一個節點失敗就會導致整個事務失敗,沒有完善的容錯機制,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273758.html
標籤:其他
上一篇:win10顯示此設備不支持接收miracast的解決辦法【【百度的方法均不好使,自己發現的,親測有效!!!!】】
下一篇:從服務器基礎環境配置到搭建Docker+Gitlab+Gitlab Runner,完整介紹Spring Boot專案的持續集成與持續交付具體實作!
