1. 程式人生 > >微服務、分庫分表、分散式事務管理、APM鏈路跟蹤效能分析演示專案

微服務、分庫分表、分散式事務管理、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分散式事務管理框架概覽文末;

資料庫分庫分表

本專案演示了使用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為韓國公司開源;