分佈式事務設計之同步場景

1.同步場景:

           1)、 讀場景:首頁推薦商品列表:商品信息,用戶信息,社交信息

            2)、 寫場景 購買商品:下單-》A ; 減庫存-》B ;支付-》C

2.解決方案:

           1)、基於異步補償的分佈式事務

            2)、架構設計的三大關鍵點

                                                        

如以寫場景爲例:針對每個步驟的請求都需要在事務補償服務的數據庫中存放事務id , state, ts , 每個微服務數據訪問層提供補償接口,如下圖:

3.業務邏輯層proxy設置(基於AOP實現)

3.1.邏輯層調用上加上事務註解@Around("execution(* *(..)) && @annotation(TX)")

3.2.Proxy在真正業務邏輯被調用之前,生成一個全局唯一TXID標示事務組,TXID保存在ThreadLocal變量裏,方法開始前寫入,完成後清除,並向遠端數據庫寫入TXID並把事務組置爲開始狀態

3.3.業務邏輯層調用數據庫訪問層之前,通過RpcProxy代理記錄當前調用參數

3.4.如果業務正常,調用完成後,當前方法的調用記錄存檔或刪除

3.5.如果業務異常,查詢調用鏈反向補償

4.數據訪問層設計 

4.1.原子接口

4.2.補償接口

       誰來提供, 冪等性保證

4.3.基於原則接口方法,在方法名加註解標註補償方法名

@Compensable (cancelMethod="cancelRecord")

5.分佈式事務補償服務

5.1.事務組表(數據庫表TDB)

        記錄事務組狀態

        txid\state\timestamp

5.2.事務調用組表(數據庫表TDB)

      記錄事務組內的每一次調用 以及相關參數

       Txid,actionid,callmethod,pramatype,params

5.3.補償策略

       調用執行失敗,修改事務組狀態,

       分佈式事務補償服務異步執行補償

 

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