互聯網通用架構技術----分佈式事務解決方案

經常使用的分佈式事務解決方案

  • 消息發送一致性(可靠消息的前提保障);
  • 消息一致性的異常處理流程;
  • 常規MQ隊列消息的處理流程和特色;
  • 消息重複發送問題及業務接口的冪等性設計;
  • 消息子系統消息確認;

消息一致性方案

  • 本地消息服務設計;
  • 獨立消息服務設計;

本地消息服務設計:

考慮將一個分佈式事務拆分爲兩個獨立的自事務,每一個子事務都有一張本地消息表。分佈式

先記錄本地消息,調用遠程接口,操做本地消息表修改狀態。這個過程不涉及分佈式操做。設計

消息最終一致性方案

創建定時服務對比建立表及結果表,進行補償操做。日誌

採用消息中間件

當採用消息中間件時,消息的可靠性體如今兩個方面:中間件

  1. 消息的發送者端 (生產者):發送者端完成操做後必定能將消息成功發送到消息系統
  2. 消息的接收者端(消費者):消費者端僅且可以從消息系統成功消費一次消息。

採用支持事務的消息中間件

阿里巴巴的RocketMQ中間件就支持一種事務消息機制,可以確保本地操做和發送消息達到本地事務同樣的效果:接口

  • 第一階段,RocketMQ在執行本地事務以前,會先發送一個Prepared消息,而且會持有這個消息的地址
  • 第二階段,執行本地事物操做
  • 第三階段,確認消息發送,經過第一階段拿到的地址去訪問消息,並修改狀態,若是本地事務成功,則修改狀態爲已提交,不然修改狀態爲已回滾

保證消費者不重複消費消息:

  1. 消費端處理消息的業務邏輯保持冪等性
  2. 保存消費者消費的狀態即保證每條消息都有惟一編號,而且保證消息處理成功後必定能寫入到一張去重日誌表;

RocketMQ、Kafka都不保證消息不重複,若是你的業務須要保證嚴格的不重複消息,那麼就須要在咱們的業務端保存消費狀態,進行去重。隊列

解決消費者消費失敗:

解決消費失敗:報警系統+人工處理事務

TCC型分佈式事務方案

相關文章
相關標籤/搜索