Seata: Simple Extensible Autonomous Transaction Architecture
Seata:簡單可擴展的自主事務架構
本文來自於:https://github.com/seata/seata
Seata有不錯的中文文檔,不過,其github主頁上的簡介並沒有中文版。翻譯下,也爲自己做個備忘
目錄
一、Seata是什麼?
Seata是分佈式事務解決方案,它擁有較高性能,且在微服務架構下易於使用
二、微服務中的 分佈式事務問題
假設我們有一個傳統的單體(monolithic)應用,其業務有3個模塊組成,這3個模塊使用單一一個本地數據源。
很自然的,本地事務(local transaction)保證了數據一致性。
在微服務架構下,事情就不一樣啦。在微服務架構下,前面提到的3個模塊被設計成3個服務,每個服務都建立在自己獨有的數據源上(微服務模式:每個服務一個數據庫)。對於每個服務本身,數據一致性依然還是由本地事務保證
三、但,在 整個業務邏輯範圍內,如何保證 數據一致性
四、Seata怎麼做的?
Seata正是爲上述問題而生的解決方案
首先,如何定義 分佈式事務?
分佈式事務(distributed transaction) 是 由一批 分支事務(branch transaction)構成的 全局事務(global transaction),通常,分支事務就是普通的本地事務(local transaction)
Seata中有3個基本組件:
事務管理者(TM, transaction manager):定義全局事務的範圍:開啓全局事務、commit或rollback全局事務
事務協調者(TC, transaction coordinator):維護全局事務和分支事務的狀態,驅動 全局事務commit或rollback
資源管理者(RM, resource manager):管理 分支事務所用到的 資源。向TC註冊分支事務,向TC彙報分支事務的狀態,驅動 分支事務commit或rollback
Seata管理的分佈式事務的典型生命週期如下:
- TM 要求 TC 開啓全局事務。TC生成代表着全局事務的 XID
- XID 在 微服務的調用鏈中 被傳播
- RM 向 TC 進行註冊,將 本地事務 註冊爲 全局事務XID 的分支事務
- TM 要求 TC commit或rollback 全局事務XID
- TC 驅動 全局事務XID下的每一個分支事務,讓每一個分支事務 完成自己的 commit或rollback
更多Seata設計原理和細節,請參照Seata wiki page:https://github.com/seata/seata/wiki
五、Seata的歷史
1. 螞蟻金服(Ant Financial)
- XTS:擴展事務服務(Extended Transaction Service)。從2007年開始,螞蟻金服中間件團隊開發了 分佈式事務中間件,該中間件在螞蟻金服被廣泛使用,解決了 跨數據庫和跨服務 的數據一致性問題
- DTX:分佈式事務擴展(Distributed Transaction Extended)。從2013年開始,XTS更名爲DTX 並在 螞蟻金服雲 發佈
2. 阿里巴巴(Alibaba)
- TXC:淘寶事務構建器(Taobao Transaction Constructor)。從2014年開始,爲了解決 從單體應用架構(monolithic)向微服務應用架構 轉變所帶來的 分佈式事務問題,阿里巴巴中間件團隊開始了該項目
- GTS:全局事務服務(Global Transaction Service)。從2016年開始,TXC更名爲GTS,作爲阿里雲中間件產品發佈
- Fescar:爲了後續可以和社區更緊密合作,從2019年開始,基於TXC/GTS我們發佈了開源項目Fescar
3. Seata社區(Seata Community)
Seata:簡單可擴展的自主事務架構(Simple Extensible Autonomous Transaction Architecture)。螞蟻金服加入了Fescar,這使得Fescar成爲 分佈式事務 的更中立和開放的社區,Fescar被命名爲Seata
Enjoy