分佈式事務的實現方式

TCC

    參與角色

        業務活動管理器(協調者)、業務服務

    TCC解釋        

        Try階段:嘗試執行,完成所有業務檢查(一致性),預留必須業務資源(準隔離性)

        Confirm階段:確認執行真正執行業務,不作任何業務檢查,只使用Try階段預留的業務資源,Confirm操作滿足冪等性。要求具備冪等設計,Confirm失敗後需要進行重試。

        Cancel階段:取消執行,釋放Try階段預留的業務資源 Cancel操作滿足冪等性Cancel階段的異常和Confirm階段異常處理方案基本上一致。

    實現

        PS:所有業務需要實現TCC接口;通過補償可以實現最終一致性。

        

    實例

    舉個簡單的例子如果你用100元買了一瓶水, Try階段:你需要向你的錢包檢查是否夠100元並鎖住這100元,水也是一樣的。如果有一個失敗,則進行cancel(釋放這100元和這一瓶水),如果cancel失敗不論什麼失敗都進行重試cancel,所以需要保持冪等。如果都成功,則進行confirm,確認這100元扣,和這一瓶水被賣,如果confirm失敗無論什麼失敗則重試(會依靠活動日誌進行重試)

數據庫分佈式事務中的 XA Transactions

    角色

        事務管理器(協調者)、業務服務

    實現

        第一階段:事務管理器要求每個涉及到事務的數據庫預提交(precommit)此操作,並反映是否可以提交.

        第二階段:事務協調器要求每個數據庫提交數據,或者回滾數據。

       PS: XA協議基於2pc協議實現。

MQ

    角色

        消息中間件、業務服務

    實現 

        第一階段Prepared消息,會拿到消息的地址。

       執行本地事務。

        第二階段確認消息發送,如果確認消息失敗,在RocketMq Broker中提供了定時掃描沒有更新狀態的消息,如果有消息沒有得到確認,會向消息發送者發送消息,來判斷是否提交

        第三階段中間件發送消息給其它業務服務。如果 發送超時,則需要一直髮送。

        第四階段其它業務服務處理完成之後,需要通過中間件反饋給發起者。如果處理失敗,則需要人工處理(由人工決定是否回滾或者繼續)。

SAGA

    角色

            協調器、業務服務

    實現

            由Saga事務協調器協調,如果正常結束那就正常完成,如果某個步驟失敗,則根據相反順序一次調用補償操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章