分散式事務柔性事務解決方案:可靠訊息最終一致性(非同步確保型) —— 一、大白話理論

NO IMAGE

分散式事務簡介

理論不多說,談起事務,必然就繞不過ACID。然而傳統的分散式事務在當下的分散式、微服務結構中中並不太合適,資料在傳統的分散式事務中會被鎖住,而且還要應對XA協議帶來的開銷(建立和關閉與資源管理器的連線、預提交、提交和回滾一個本地事務等等)。

與之相對的,是更符合當下業務需求的基於BASE理論的柔性事務。

看看ACID和BASE的區別

Soft State:柔性狀態

【ACID(A,I)::原子性,隔離性】與【BASE(S)::柔性狀態】:比如說在支付系統中,有一個支付業務系統和積分系統,如果要滿足原子性與隔離性,那麼邏輯肯定是這樣的:

  • 要麼是支付成功,加積分,在這期間,積分資料與支付資料是不可訪問的。
  • 要麼是支付失敗,積分不變,在這期間,積分資料與支付資料是不可訪問的。

但是在BASE的柔性狀態中,允許出現

  • 支付成功,積分不變,並且在支付成功後,其他服務查詢我的支付狀態時,也會是成功的。在這期間,積分資料與支付資料是可訪問的。
  • 加積分,支付失敗,在這期間,積分資料與支付資料是可訪問的。

這樣的情況,柔性事務中,允許資料短暫的不一致,以及非隔離性的操作。

Eventual Consistency:最終一致性

【ACID(A,D)::原子性,永續性】與【BASE(E)最終一致性】:最終一致性指的是系統中的所有資料副本經過一定時間後,最終能夠達到一致的狀態。

  • 事務中的原子性:要麼全部成功,要麼全部失敗(這與上面提到的不同,上面說的是允許中間狀態出現,這裡說的是最後的狀態要是一致的);
  • 事務中的永續性:資料必須持久化(其實有些業務不持久化也是沒問題的….);

Basically Available:基本可用。

基本可用有兩個層面,即,

  • 服務可用,但服務降級了;
  • 分割槽出現故障,我的業務依舊不受影響;

比如說我有一個秒殺商品的業務,有些使用者會獲取到一個假的秒殺頁,並且秒殺必定失敗…之類的。