介紹Rabbitmg用於解決分佈式事務必須掌握的5個核心概念html
一款分佈式消息中間件,基於erlang語言開發, 具有語言級別的高併發處理能力。和Spring框架是同一家公司。
支持持久化、高可用算法
分佈式事務是一個業務問題,不能脫離具體的場景。數據庫
● 基於數據庫XA/ JTA協議的方式
須要數據庫廠商支持; JAVA組件有atomikos等
● 異步校對數據的方式
支付寶、微信支付主動查詢支付狀態、對帳單的形式;
● 基於可靠消息(MQ)的解決方案
異步場景;通用性較強;拓展性較高
● TCC編程式解決方案
嚴選、阿里、螞蟻金服本身封裝的DTX編程
本文目標:針對全部人羣,學會基於可靠消息來解決分佈式事務問題。
分佈式事務的解決方案,業務針對性很強,重要的是思路,而不是照搬微信
誤覺得這樣的接口調用寫法,就不會有分佈式事務問題
架構
上述兩種狀況,都會致使數據不一致的問題併發
經過MQ解決分佈式事務的5個步驟, 以及分佈式事務處理中要注意的地方框架
外賣下訂單後,能夠慢慢等待運單中心數據生成,並不是強制要求同時性運維
最終使多方數據達到一致。異步
爲了確保數據必定成功發送到MQ。
在同一事務中,增長一個記錄表的操做, 記錄每一條發往MQ的數據以及它的發送狀態
因而咱們在訂單系統中增長一個本地信息表
因而在代碼實踐中,再也不經過HTTP接口調用運單系統接口,而是使用MQ
生成訂單時,也保存本地信息表
-確保在SB中開啓Confirm機制
兜底方案:定時檢查消息表,超時沒發送成功,再次重發
因而須要如下特性:
冪等性
防止重複消息數據的處理,一次用戶操做,只對應一次數據處理
開啓手動ACK模式
由消費者控制消息的重發/清除/丟棄
消費者處理失敗,須要MQ再次重發給消費者。
出現異常通常會重試幾回,由消費者自身記錄重試次數,並進行次數控制(不會永遠重試!)
消費者處理失敗,直接丟棄或者轉移到死信隊列(DLQ)重試次數過多、消息內容格式錯誤等狀況,經過線上預警機制通知運維人員
口優勢
口缺點
儘可能避免分佈式事務;
儘可能將非核心事務作成異步;
CAP理論BASE理論2PC協議3PC協議Paxos算法.Raft一致性協議