歡迎光臨
每天分享高質量文章

FESCAR:阿裡重磅開源分散式事務解決方案

FESCAR名字的由來:Fast & EaSy Commit And Rollback

  • FESCAR是啥?

被用在微服務架構中的高效能分散式事務解決方案。

  • 微服務中的分散式事務問題

讓我們想象一個傳統的應用,由3個模組構成,並且這三個模組使用同一個資料源。很明顯,資料一致性由資料庫提供的本地事務就能搞定。

local transaction

然而,一切美好都被在微服務架構中被打破。3個模組變成了3個服務,每個服務有獨立的資料源(參考https://microservices.io/patterns/data/database-per-service.html)。每個服務的資料一致性由本地事務保證,但是跨服務的業務呢?如下圖所示,某個業務既需要操作庫存(Storage),又需要操作訂單(Order),還需要操作賬戶(Account)。

distribution transaction
  • FESCAR怎麼做?
distribution transaction

首先,如果定義分散式事務?我們認為一個分散式事務是由多個分支事務組成的全域性事務,通常來說,分支事務就是本地事務。

define distribution transaction

FESCAR有三個基本元件:

  • Transaction Coordinator(TC):事務協調器,維護著全域性事務和分支事務的狀態, 它來決定全域性的提交還是回滾。
  • Transaction Manager(TM): 事務管理器,定義全域性事務的範圍:開始一個全域性事務,提交或者回滾一個全域性事務。
  • Resource Manager(RM): 資源管理器,管理分支事務處理的資源,與TC通訊以註冊分支事務並報告分支事務的狀態,並驅動分支事務提交或回滾.
FESCAR 3 components

一個典型的FESCAR維護的分散式事務的生命週期如下:

  1. TM向TC請求開啟一個全域性事務,TC生成一個XID,一個表示全域性事務的唯一ID;
  2. 透過微服務的呼叫鏈,XID被廣播出去(圖中綠色線路);
  3. RM向TC註冊一個屬於XID表示的分散式事務下的本地事務(紅色箭頭);
  4. TM向TC詢問是提交還是回滾XID表示的全域性事務;
  5. TC驅動XID表示的全域性事務下的所有分支事務,完成提交或者回滾動作。

如下圖所示:

lifecycle

參考:https://github.com/alibaba/fescar

贊(0)

分享創造快樂