一. 什麼是分佈式事務
有兩個服務,一個訂單服務,一個商品服務。當我們下單成功後,訂單服務會調用商品服務的扣庫存方法,如果這時候商品服務出現異常,扣庫存失敗,那就會導致事務的問題,以後有可能出現超賣。所以我們在微服務架構開發的時候,一定要處理好分佈式事務
二. 分佈式事務理論
比較流行的就是BASE,CAP定理
CAP理論:
是由加州大學伯克利分校Eric Brewer教授提出來的,他指出WEB服務無法同時滿足一下3個屬性:
- 一致性(Consistency) : 客戶端知道一系列的操作都會同時發生(生效)
- 可用性(Availability) : 每個操作都必須以可預期的響應結束
- 分區容錯性(Partition tolerance) : 即使出現單個組件無法可用,操作依然可以完成
具體地講在分佈式系統中,在任何數據庫設計中,一個Web應用至多隻能同時支持上面的兩個屬性。顯然,任何橫向擴展策略都要依賴於數據分區。因此,設計人員必須在一致性與可用性之間做出選擇。
BASE理論:
在分佈式系統中,我們往往追求的是可用性,它的重要程序比一致性要高,那麼如何實現高可用性呢? 前人已經給我們提出來了另外一個理論,就是BASE理論,它是用來對CAP定理進行進一步擴充的。BASE理論指的是:
- Basically Available(基本可用)
- Soft state(軟狀態)
- Eventually consistent(最終一致性)
BASE理論是對CAP中的一致性和可用性進行一個權衡的結果,理論的核心思想就是:我們無法做到強一致,但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性(Eventual consistency)
三.RabbitMQ怎麼實現分佈式事務
總所周知 分佈式事務有多種解決方案,例如2CP,TCC,本地消息表等解決方案,今天我們重點來說說RabbitMQ實現分佈式事務的解決方案
RabbitMQ解決分佈式事務原理: 採用最終一致性原理。
需要保證以下三要素
1、確認生產者一定要將數據投遞到MQ服務器中(採用MQ消息確認機制)
2、MQ消費者消息能夠正確消費消息,採用手動ACK模式,使用不補償機制(注意重試冪等性問題)
3、如何保證第一個事務先執行,採用補償機制,創建一個補單消費者進行監聽,如果訂單沒有創建成功,進行補單。