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