天天看點

二段送出協定與三段送出協定

二段送出協定

二段送出協定與三段送出協定

第一階段: 準備階段:協調者向參與者發起指令,參與者評估自己的狀态,如果參與者評估指令可以完成,則會寫redo或者undo日志,讓後鎖定資源,執行操作,但并不送出。 第二階段:如果每個參與者明确傳回準備成功,則協調者向參與者發送送出指令,參與者釋放鎖定的資源,如何任何一個參與者明确傳回準備失敗,則協調者會發送中指指令,參與者取消已經變更的事務,釋放鎖定的資源。

兩階段送出方案應用非常廣泛,幾乎所有商業OLTP資料庫都支援XA協定。但是兩階段送出方案鎖定資源時間長,對性能影響很大,基本不适合解決微服務事務問題。 缺點:如果協調者當機,參與者沒有協調者指揮,則會一直阻塞。

二段送出協定與三段送出協定

三段送出協定

二段送出協定與三段送出協定

第一階段是表決階段,所有參與者都将本事務能否成功的資訊回報發給協調者;

第二階段是執行階段,協調者根據所有參與者的回報,通知所有參與者,步調一緻地在所有分支上送出或者復原。

兩階段送出方案應用非常廣泛,幾乎所有商業OLTP資料庫都支援XA協定。但是兩階段送出方案鎖定資源時間長,對性能影響很大,基本不适合解決微服務事務問題。

三階段送出協定是兩階段送出協定的改進版本。它通過逾時機制解決了阻塞的問題,并且把兩個階段增加為三個階段:

詢問階段:協調者詢問參與者是否可以完成指令,協調者隻需要回答是還是不是,而不需要做真正的操作,這個階段逾時導緻中止。

準備階段:如果在詢問階段所有的參與者都傳回可以執行操作,協調者向參與者發送預執行請求,然後參與者寫redo和undo日志,執行操作,但是不送出操作;如果在詢問階段任何參與者傳回不能執行操作的結果,則協調者向參與者發送中止請求,這裡的邏輯與兩階段送出協定的的準備階段是相似的,這個階段逾時導緻成功

2PC與3PC的差別

繼續閱讀