分散式事務—最終一致性模型(無獨立訊息系統)
阿新 • • 發佈:2019-01-07
參考:https://blog.csdn.net/shanchahua123456/article/details/84781638
流程
1 上游程式/資料庫(生產者):
1.1 本地事務 【生成唯一ID——》執行業務流程 ——》 本地儲存訊息資料(db_queue 表) ——》傳送到MQ】
本地事務中任意異常都會回滾,但小概率出現 MQ傳送成功,但是本地事務未提交。
所以下游消費時,要確認上游業務已完成。若是簡單的資料傳輸/同步則不需要確認,因為上游無資料,下游也不會拉取到資料。
1.2 確認介面:回寫業務表狀態,刪除db_queue 表
1.3 查詢介面:狀態業務表、db_queue 表查詢
2 訊息恢復功能:(注意冪等性設計)
2.1查詢上游程式超時未傳送,重發;
2.2查詢上游程式超時未確認資料,去下游消費者查詢,若下游已消費則上游標誌確認,若下游未消費則重發
3 下游程式/資料庫(消費者):(注意冪等性設計)
3.1 根據業務判斷是否需要查詢上游業務已完成,避免。(資料傳輸不需要)
3.2 本地事務 【 冪等執行業務流程 ——》 用上游介面,確認上游業務資料 】
3.3 注意MQ的可靠消費,手動ACK,限制收取量
3.4 資料庫冪等設計可以依靠,主鍵/唯一索引/先查再寫(一定概率有問題)