前言
我們後續解析seata原始碼都是基於版本0.9.0,這個是筆者寫這篇原始碼解析時候最新的乙個tag。seata的原始碼其實非常簡單,後續我們會從整個服務啟動、服務發現、配置載入等開始,串聯起at、tcc等事務模式,把這些過程的所有原始碼做乙個解析。這篇文章,我們首先來了解一下seata專案的總體概況。
專案結構
seata包含的模組比較多,整個的模組劃分比較清晰,很容易理解。
所有模組的純**量加起來不超過10w行,如果除去乙個介面的多個實現,如:配置中心、註冊中心等。真正的邏輯**量並不多。
seata和dubbo一樣,實現了乙個簡單的擴充套件點,用於管理乙個介面下的多個實現。
下面我們先來了解一下每個模組是做什麼的,在腦海裡建立乙個總體的大圖,後續我們閱讀原始碼的時候就不會迷糊。
codec模組
seata的編碼解碼器模組,現在實現了kryo、protobuf等編解碼器。
common模組
從命名就可以知道是通用模組。定義了通用的異常、工具類、執行緒工具、計數器等。最主要的是,這裡定義了擴充套件點的載入類。和dubbo很相似,seata也使用了擴充套件點這種實現類的管理方式。
config模組
seata的配置中心和註冊中心是分離的,支援了市面上主流的各種配置中心。config模組主要是各種配置中心的支援原始碼。包括:apollo、consul、etcd3等等。其中有乙個core模組,是配置的核心實現,預設提供使用 file 儲存配置。
core模組
核心模組,提供了整個seata的基礎模型,包括封裝好的rpc、資料模型、通訊協議、事件等等。
discovery模組
seata存在乙個事務協調器(tc),用於管理全域性的事務,rm、tm等模組作為sdk和業務**在一起,但是它們現就是用的類似微服務的註冊/訂閱方式。因此需要乙個註冊中心。discovery模組就是不同註冊中心的具體實現。現在支援consul、etcd3、eureka、redis等等。
metrics模組
用於統計的模組,現在的統計資訊提供了對外匯出的方法。
rm模組
resource manager的核心實現。定義了抽象實現,整個模組的**量很少。
#####rm-datasource模組
和rm模組很像,但是它的作用是通過對 jdbc做擴充套件,實現了對 mysql 等資料庫的透明接入 seata rm 的實現。**量較多。
saga模組
對saga型別事務的實現,會在後面saga事務原始碼分析的時候重點介紹。
tcc模組
和saga型別,這個模組提供了tcc事務的實現。
tm模組
分布式事務中tm的實現。看過我們seata at模式介紹的,就會知道tm的具體作用。後面在解析具體事務原始碼的時候會講到。
spring模組
spring註解類的實現全部在這個模組
server模組
test模組
seata的demo測試模組。
總結seata劃分的模組很多,但是每個模組的原始碼很少,總共原始碼也不超過10w行。後續我們會在使用過程中,通過功能串聯的方式,把整個過程的原始碼做乙個詳細的解析。
原始碼解析之Seata專案中的分布式ID生成演算法
saga作為阿里開源的長事務解決方案,涉及到全域性事務id的生成和串聯,需要保證事務id的穩定性和全域性唯一性。twitter開源的snowflake演算法。saga實現的全域性唯一的id生成演算法也是 於snowflake。作為最流行的分布式id生成演算法之一,其實在無數的開源 中都有看到過他的身...
Seata原始碼分析之介紹
seata 是一款開源的分布式事務解決方案,致力於提供高效能和簡單易用的分布式事務服務。seata 將為使用者提供了 at tcc saga 和 xa 事務模式,為使用者打造一站式的分布式解決方案。seata 鏈結.最新的版本是1.2 seata sample 鏈結.官方文件 鏈結 可以先執行 sa...
Flink 原始碼解析 專案結構一覽
flink 原始碼專案結構一覽 1 flink 從0到1學習 apache flink 介紹 2 flink 從0到1學習 mac 上搭建 flink 1.6.0 環境並構建執行簡單程式入門 3 flink 從0到1學習 flink 配置檔案詳解 4 flink 從0到1學習 data source...