微服務、分庫分表、分散式事務管理、APM鏈路跟蹤效能分析演示專案
好多年沒發博,最近有時間整理些東西,分享給大家。
所有內容都在github專案liuzhibin-cn/my-demo中,基於SpringBoot,演示Dubbo微服務 + Mycat, Sharding-Proxy分庫分表 + Seata分散式事務管理 + ZipKin, SkyWalking, PinPoint效能分析鏈路跟蹤APM工具,有詳細文件,可以快速執行
演示專案架構
執行演示專案
package.sh為打包指令碼:
sh package.sh
:最簡單執行方式,使用單個MySQL資料庫、nacos註冊中心,執行4個Dubbo服務和1個Web應用;sh package.sh -mycat
sh package.sh -sharding-proxy
:使用Sharding-Proxy分庫分表;sh package.sh -seata
:使用Seata分散式事務管理;sh package.sh -zipkin
:使用ZipKin進行鏈路跟蹤、效能分析;sh package.sh -pinpoint
:使用PinPoint進行鏈路跟蹤、效能分析;sh package.sh -skywalking
:使用SkyWalking進行鏈路跟蹤、效能分析;
引數可以組合,例如sh package.sh -mycat -seata -zipkin
,分庫分表引數只能二選一,APM工具只能三選一。
最簡單執行方式操作步驟:
- JDK 8+;
- 部署nacos,用於Dubbo註冊中心;
比較簡單,參考Nacos快速開始即可。 - MySQL資料庫;
建庫指令碼sql-schema.sql,是演示分庫分表用的建庫指令碼,簡單方式執行只需要其中mydemo-dn1
單庫即可。 - 修改專案配置資訊;
配置資訊都在parent pom.xml中,包括資料庫連線資訊、nacos地址等。 - 編譯打包;
執行sh package.sh
,Windows環境裝了git bash就可以執行。 執行演示專案:
依次啟動服務和Web應用:java -jar item-service\target\item-service-0.0.1-SNAPSHOT.jar java -jar stock-service\target\stock-service-0.0.1-SNAPSHOT.jar java -jar user-service\target\user-service-0.0.1-SNAPSHOT.jar java -jar order-service\target\order-service-0.0.1-SNAPSHOT.jar java -jar shop-web\target\shop-web-0.0.1-SNAPSHOT.jar
通過http://localhost:8090/shop訪問,執行操作檢視效果;
分散式事務管理
阿里雲分散式事務管理GTS的開源版Seata,2019年1月開源出來,1.0.0版已經發布。相關概念、部署和使用方法參考Seata分散式事務管理框架概覽。
Seata提供AT、TCC、Saga三種柔性事務模式,AT模式對應用幾乎透明,使用方便,目前來看:
- 效能開銷還比較高;
- 在使用Mycat、Sharding-Proxy進行分庫分表時,Seata會產生不少路由到全分片執行的SQL操作,詳細參考Seata分散式事務管理框架概覽文末;
資料庫分庫分表
本專案演示了使用Mycat和Sharding-Proxy進行分庫分表,相關概念、部署和使用方法,參考MyCat分庫分表概覽、Sharding-Proxy分庫分表概覽,這2個分庫分表開源方案與DRDS對比,參考DRDS產品概覽。
Mycat、Sharding-Proxy和DRDS都實現了MySQL協議,成為獨立的中介軟體,將分庫分表、讀寫分離等資料儲存的彈性伸縮方案與應用隔離,並且實現語言無關。
APM全鏈路監控
演示專案支援PinPoint、SkyWalking、ZipKin三種APM工具進行全鏈路跟蹤和效能分析,相關概念、部署和使用方法,參考PinPoint部署和使用、SkyWalking部署和使用、ZipKin部署和使用。
三種APM工具對比:
- 使用方式:PinPoint和SkyWalking都採用javaagent方式,對應用程式碼幾乎沒有侵入性;ZipKin需要和應用打包到一起,並在應用中完成各種配置,屬於強依賴關係;
- 鏈路跟蹤能力:整體上看相差不大,基本都參照Google Dapper,也都支援對大量主流框架的跟蹤,細節上有些差異:
- 對單次RPC呼叫分析,ZipKin定義的Annotations更精細,參考ZipKin部署和使用;
- PinPoint和SkyWalking都提供將額外方法新增到呼叫鏈跟蹤的功能,其中PinPoint對程式碼完全沒有侵入性,SkyWalking則需要對方法添加註解;
- SkyWalking支援在Span中新增自定義tag功能,利用該功能可以將方法引數值等額外資訊記錄到Span中,有利於問題分析;
- UI功能:PinPoint和SkyWalking UI功能比較豐富,都提供應用/服務、例項等層級的效能統計,兩者各有特色;ZipKin UI功能最弱,只提供依賴關係、具體呼叫鏈檢視分析;
額外的UI功能,可以讀取APM工具的資料,自定義開發; - 社群支援:ZipKin架構靈活、文件完善,社群支援度最高,Spring Cloud和Service Mesh(istio)官方提供ZipKin支援;SkyWalking是華為員工開發,已成為Apache專案;PinPoint為韓國公司開源;