微服务、分库分表、分布式事务管理、APM链路跟踪性能分析演示项目
riccc 人气:4好多年没发博,最近有时间整理些东西,分享给大家。
所有内容都在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为韩国公司开源;
加载全部内容