FESCAR名字的由來:Fast & EaSy Commit And Rollback
- FESCAR是啥?
被用在微服務架構中的高效能分散式事務解決方案。
- 微服務中的分散式事務問題
讓我們想象一個傳統的應用,由3個模組構成,並且這三個模組使用同一個資料源。很明顯,資料一致性由資料庫提供的本地事務就能搞定。
然而,一切美好都被在微服務架構中被打破。3個模組變成了3個服務,每個服務有獨立的資料源(參考https://microservices.io/patterns/data/database-per-service.html)。每個服務的資料一致性由本地事務保證,但是跨服務的業務呢?如下圖所示,某個業務既需要操作庫存(Storage),又需要操作訂單(Order),還需要操作賬戶(Account)。
- FESCAR怎麼做?
首先,如果定義分散式事務?我們認為一個分散式事務是由多個分支事務組成的全域性事務,通常來說,分支事務就是本地事務。
FESCAR有三個基本元件:
- Transaction Coordinator(TC):事務協調器,維護著全域性事務和分支事務的狀態, 它來決定全域性的提交還是回滾。
- Transaction Manager(TM): 事務管理器,定義全域性事務的範圍:開始一個全域性事務,提交或者回滾一個全域性事務。
- Resource Manager(RM): 資源管理器,管理分支事務處理的資源,與TC通訊以註冊分支事務並報告分支事務的狀態,並驅動分支事務提交或回滾.
一個典型的FESCAR維護的分散式事務的生命週期如下:
- TM向TC請求開啟一個全域性事務,TC生成一個XID,一個表示全域性事務的唯一ID;
- 透過微服務的呼叫鏈,XID被廣播出去(圖中綠色線路);
- RM向TC註冊一個屬於XID表示的分散式事務下的本地事務(紅色箭頭);
- TM向TC詢問是提交還是回滾XID表示的全域性事務;
- TC驅動XID表示的全域性事務下的所有分支事務,完成提交或者回滾動作。
如下圖所示:
參考:https://github.com/alibaba/fescar