1. 程式人生 > >分散式事務(兩段提交協議與三段提交協議)

分散式事務(兩段提交協議與三段提交協議)

兩階段提交協議:

第一階段,準備階段:協調者向參與者發起指令,參與者評估自己的狀態,如果參與者評估指令可以完成,則會寫redo或者undo日誌,然後鎖定資源,執行操作,但並不提交;

第二階段:如果每個參與者明確返回 都準備成功,則協調者向參與者發生提交指令,參與者釋放鎖定的資源,如果任何一個參與者明確返回準備失敗,則協調者會發生終止指令,參與者取消已經變更的事務,釋放鎖定的資源。

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

兩階段提交協議弊端(缺點):如果協調者宕機,參與者沒有協調者指揮,則會一直阻塞。

        


三階段提交協議:

增加了一個詢問階段(在兩階段提交協議之前增加了一詢問階段),詢問階段可以確保儘可能早的發現無法執行的操作而需要終止的行為,但是它並不能發現所有的這種行為,只會減少這種情況的發生,在準備階段以後,協調者和參與者執行的任務中都增加了超時,一旦超時,協調者和參與者都繼續提交事務,預設為成功,這也是根據概率統計上超時後預設成功的正確性最大。

超時,終止提交,進行回滾。

三階段提交協議兩階段提交協議相比,具有如上的優點,但是一旦發生超時,系統仍然會發生不一致,只不過這種情況很少見罷了,好處就是至少不會阻塞和永遠鎖定資源。