分布式事務——使用消息隊列消除兩階段提交


第一次發博文,略緊張。。。

 

核心:系統冪等性,記一個操作在系統中重復執行的結果是一樣的。
場景:A賬戶轉賬給B賬戶1000塊,A賬戶和B賬戶屬於兩個系統System-A和System-B
 1. System-A本地事務
  a. 開始本地事務
  b. A賬戶扣款1000
  c. 寫入消息表
  d. 完成本地事務
 2. 中間消息系統
  a. 讀取System-A中的未應用的消息
  b. 將消息發往System-B
 3. System-B本地事務
  a. 判斷消息是否已經應用
  b. 若沒有
   i. 開始本地事務
   ii. B賬戶增加1000
   iii. 寫入消息應用表
   iv. 完成本地事物
  c. 若有
   i. 忽略消息
  d. 將應用消息發往System-A
 4. 中間消息系統
  a. 將System-A的消息狀態更新

幾種異常情況:
 1. System-A本地事務階段失敗
  a. System-A本地事務回滾
 2. 中間消息系統
  a. 讀取System-A中的未應用的消息(掛掉),消息不會發送
  b. 將消息發往System-B發出之后掛掉
   i. System-B已經將事務執行,同時System-B接收到同樣的消息,會忽略
 3. System-B本地事務階段失敗
  a. 事務成功消息不會寫入消息應用表
  b. 若需要補償,則向本地消息表中添加一條失敗消息,由System-A進行補償
 4. 中間消息系統更新狀態失敗
  a. 更新失敗,消息將會重復發送

 

幾種經典的分布式事務解決方案:

http://weibo.com/ttarticle/p/show?id=2309403965965003062676


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM