Seata原始碼解析 專案結構

2021-09-30 01:33:57 字數 1960 閱讀 2407

前言

我們後續解析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...