微服務、分庫分表、分布式事務管理、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:使用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工具只能三選一。

最簡單運行方式操作步驟:

  1. JDK 8+;
  2. 部署nacos,用於Dubbo注冊中心;

    比較簡單,參考Nacos快速開始即可。
  3. MySQL數據庫;

    建庫腳本sql-schema.sql,是演示分庫分表用的建庫腳本,簡單方式運行只需要其中mydemo-dn1單庫即可。
  4. 修改項目配置信息;

    配置信息都在parent pom.xml中,包括數據庫連接信息、nacos地址等。
  5. 編譯打包;

    執行sh package.sh,Windows環境裝了git bash就可以運行。
  6. 運行演示項目:

    依次啟動服務和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
    
  7. 通過http://localhost:8090/shop訪問,執行操作查看效果;

分布式事務管理

阿里雲分布式事務管理GTS的開源版Seata,2019年1月開源出來,1.0.0版已經發布。相關概念、部署和使用方法參考Seata分布式事務管理框架概覽

Seata提供AT、TCC、Saga三種柔性事務模式,AT模式對應用幾乎透明,使用方便,目前來看:

  1. 性能開銷還比較高;
  2. 在使用Mycat、Sharding-Proxy進行分庫分表時,Seata會產生不少路由到全分片執行的SQL操作,詳細參考Seata分布式事務管理框架概覽文末;

數據庫分庫分表

本項目演示了使用MycatSharding-Proxy進行分庫分表,相關概念、部署和使用方法,參考MyCat分庫分表概覽Sharding-Proxy分庫分表概覽,這2個分庫分表開源方案與DRDS對比,參考DRDS產品概覽

Mycat、Sharding-Proxy和DRDS都實現了MySQL協議,成為獨立的中間件,將分庫分表、讀寫分離等數據存儲的彈性伸縮方案與應用隔離,並且實現語言無關。

APM全鏈路監控

演示項目支持PinPointSkyWalkingZipKin三種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為韓國公司開源;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM