400-885-0207
                                                  申請試用
                                                  [返回]

                                                  分布式事務解決方案的應用

                                                  發布時間:2020-05-20

                                                  • IBPS V3分布式事務方案支持 TCC 、可靠消息最終一致性。
                                                  • 可以混合使用,即通用業務使用可靠消息最終一致性,強一致要求的場景下視同TCC方案。
                                                    TCC是三個首字母,Try-Confirm-Cancel,具體描述是將整個操作分為上面這三步。
                                                    兩個微服務間同時進行Try,在Try的階段會進行數據的校驗,檢查,資源的預創建,如果都成功就會分別進行Confirm,如果兩者都成功則整個TCC事務完成。
                                                    如果Confirm時有一個服務有問題,則會轉向Cancel,相當于進行Confirm的逆向操作。

                                                    TCC流程

                                                    可靠消息最終一致性

                                                    此方案涉及 3 個模塊:

                                                    • 上游應用,執行業務并發送 MQ 消息。
                                                    • 可靠消息服務和 MQ 消息組件,協調上下游消息的傳遞,并確保上下游數據的一致性。
                                                    • 下游應用,監聽 MQ 的消息并執行自身業務。
                                                    可靠消息最終一致性
                                                    第一階段:上游應用執行業務并發送 MQ 消息
                                                    上游應用將本地業務執行和消息發送綁定在同一個本地事務中,保證要么本地操作成功并發送 MQ 消息,要么兩步操作都失敗并回滾。
                                                    
                                                    上游應用和可靠消息之間的業務交互圖如下:
                                                    可靠消息最終一致性第一階段
                                                    • 上游應用發送待確認消息到可靠消息系統。

                                                    • 可靠消息系統保存待確認消息并返回。

                                                    • 上游應用執行本地業務。

                                                    • 上游應用通知可靠消息系統確認業務已執行并發送消息。

                                                    • 可靠消息系統修改消息狀態為發送狀態并將消息投遞到 MQ 中間件。

                                                      以上每一步都可能出現失敗情況,分析一下這 5 步出現異常后上游業務和消息發送是否一致:

                                                    可靠消息最終一致性步驟記錄

                                                    上游應用執行完成,下游應用尚未執行或執行失敗時,此事務即處于 BASE 理論的 Soft State 狀態。

                                                    第二階段:下游應用監聽 MQ 消息并執行業務

                                                    下游應用監聽 MQ 消息并執行業務,并且將消息的消費結果通知可靠消息服務。

                                                    可靠消息的狀態需要和下游應用的業務執行保持一致,可靠消息狀態不是已完成時,確保下游應用未執行,可靠消息狀態是已完成時,確保下游應用已執行。
                                                    下游應用和可靠消息服務之間的交互圖如下:

                                                    • 下游應用監聽 MQ 消息組件并獲取消息。

                                                    • 下游應用根據 MQ 消息體信息處理本地業務。

                                                    • 下游應用向 MQ 組件自動發送 ACK 確認消息被消費。

                                                    • 下游應用通知可靠消息系統消息被成功消費,可靠消息將該消息狀態更改為已完成。

                                                      以上每一步都可能出現失敗情況,分析一下這 4 步出現異常后下游業務和消息狀態是否一致:

                                                    可靠消息最終一致性第二階段
                                                    通過分析以上兩個階段可能失敗的情況,為了確保上下游數據的最終一致性,在可靠消息系統中,
                                                    需要開發 消息狀態確認 和 消息重發 兩個功能以實現 BASE 理論的 Eventually Consistent 特性。
                                                    異常處理一:消息狀態確認
                                                    可靠消息服務定時監聽消息的狀態,如果存在狀態為待確認并且超時的消息,則表示上游應用和可靠消息交互中的步驟 4 或者 5 出現異常。
                                                    可靠消息則攜帶消息體內的信息向上游應用發起請求查詢該業務是否已執行。
                                                    上游應用提供一個可查詢接口供可靠消息追溯業務執行狀態,如果業務執行成功則更改消息狀態為已發送,否則刪除此消息確保數據一致。
                                                    
                                                    具體流程如下:
                                                    可靠消息最終一致性異常一
                                                    • 可靠消息查詢超時的待確認狀態的消息。
                                                    • 向上游應用查詢業務執行的情況。
                                                    • 業務未執行,則刪除該消息,保證業務和可靠消息服務的一致性。業務已執行,則修改消息狀態為已發送,并發送消息到 MQ 組件。
                                                    異常處理二:消息重發
                                                    消息已發送則表示上游應用已經執行,接下來則確保下游應用也能正常執行。
                                                    
                                                    可靠消息服務發現可靠消息服務中存在消息狀態為已發送并且超時的消息,則表示可靠消息服務和下游應用中存在異常的步驟,
                                                    無論哪個步驟出現異常,可靠消息服務都將此消息重新投遞到 MQ 組件中供下游應用監聽。
                                                    
                                                    下游應用監聽到此消息后,在保證冪等性的情況下重新執行業務并通知可靠消息服務此消息已經成功消費,
                                                    最終確保上游應用、下游應用的數據最終一致性。具體流程如下:
                                                    可靠消息最終一致性異常二
                                                    • 可靠消息服務定時查詢狀態為已發送并超時的消息。
                                                    • 可靠消息將消息重新投遞到 MQ 組件中。
                                                    • 下游應用監聽消息,在滿足冪等性的條件下,重新執行業務。
                                                    • 下游應用通知可靠消息服務該消息已經成功消費。

                                                    通過消息狀態確認和消息重發兩個功能,可以確保上游應用、可靠消息服務和下游應用數據的最終一致性


                                                  • 咨詢熱線: 400-885-0207
                                                  • 售后熱線: 020―31706510
                                                  • 公司電話: 020―31706510
                                                  技術QQ免費通話免費試用微信咨詢
                                                  国产免费高清视频拍拍拍 国产在线欧美日韩精品一区二区 国产伦一区二区三区 精品一区二区三区不卡无码