好多年沒發博,最近有時間整理些東西,分享給大家。
所有內容都在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
:使用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為韓國公司開源;