微服務、分庫分表、分佈式事務管理、APM鏈路跟蹤性能分析演示項目

好多年沒發博,最近有時間整理些東西,分享給你們。html

全部內容都在github項目liuzhibin-cn/my-demo中,基於SpringBoot,演示Dubbo微服務 + Mycat, Sharding-Proxy分庫分表 + Seata分佈式事務管理 + ZipKin, SkyWalking, PinPoint性能分析鏈路跟蹤APM工具,有詳細文檔,能夠快速運行java


演示項目架構



運行演示項目

package.sh爲打包腳本:git

  • 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工具只能三選一。github

最簡單運行方式操做步驟:web

  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應用:sql

    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分佈式事務管理框架概覽apache

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

  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爲韓國公司開源;
相關文章
相關標籤/搜索