Zipkin与skywalking性能分析对比
一、zipkin篇
1. zipkin是什么?
Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。
2. 为什么用 Zipkin?
随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin分布式跟踪系统就能很好的解决这样的问题。
3. 实现的功能是什么?
可视化记录每个模块的调用的的耗时情况
可视化记录每个模块的依赖关系
4. 架构图
从架构图我们可以看出zipkin的主要职责是收集和展示链路追踪的数据。
5.Zipkin的核心组件:
Collector:收集器组件,处理从外部系统发过来的跟踪信息,将这些信息转化为zipkin处理的span格式,支持后续的存储、分析、展示等功能。
Storage:存储组件,处理收集器接受到的跟踪信息,默认将信息存储在内存中,可以修改存储策略使用其他组件,支持MySql和Elasticsearch等
Web UI :UI组件,基于api组件实现的上层应用,提供web页面,用来展示zipkin中的调用链路和系统依赖关系等。
Restful API:api组件,为web界面提供查询存储中数据的接口
6.数据存储:
Zipkin支持可插拔的数据存储方式,支持内存存储,MySQL 以及Kafka和rabbitMq
说明:
Zipkin 分为两端,一个是 Zipkin 服务端,一个是 Zipkin 客户端,客户端也就是微服务的应用,客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。发送的方式有两种,一种是消息总线的方式如 RabbitMQ 发送,还有一种是 HTTP 报文的方式发送。
5. 服务端安装
A.基于SpringCloud配置文件方式整合zipkin(现在spring不推荐使用此方式,推荐使用jar的方式去启动)
1.在pom文件中添加相应的依赖可参考:https://github.com/liaorui/zipkin-demo
2.在application.yml中添加如下下配置即可
server: port: 9411 spring: application: name: zipkin-server |
B. 以Java -jar的方式启动(推荐)
java -jar zipkin-server-2.20.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=root --MYSQL_DB=zipkin --RABBIT_ADDRESSES=192.168.10.101:5672 --RABBIT_USER=guest --RABBIT_PASSWORD=guest --RABBIT_VIRTUAL_HOST=/ --RABBIT_QUEUE=zipkin |
选择自己喜欢的方式以及想要的参数即可。
6. 我们的服务如何接入zipkin服务端?
1. 在pom文件中添加依赖
>org.springframework.cloud tId>spring-cloud-starter-zipkin > |
2. 在application.yml中添加如下下配置即可
server: port: 9000 spring: application: name: backend zipkin: base-url: http://localhost:9411 sender: type: web #web表示以http报文的形式向服务端发送数据 sleuth: sampler: percentage: 1.0 |
7.项目实战演示
当然我们可以使用Sleuth+Zipkin+MQ+ES构建一个更完善(支持持久化和高并发+高可用)的链路跟踪架构
架构图如下:
项目如图:
项目架构如图:
当我们请求发生时查看zipkin,我们可以看到依赖关系如图:
调用链路如图:
我们具体看到每个请求的耗时情况!
二、skywalking篇
说明:由于skywalking与zipking的原理大部分是相同的我们做过多的重复解释,只保留最重要的部分
1.什么是skywalking?
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。
2.架构图
SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。
3.服务安装
(1)环境要求
JDK8+
Elasticsearch 6.x
8080,10800,11800,12800 端口不被占用
(2)下载 SkyWalking
下载地址:http://skywalking.apache.org/downloads/
(3)配置skywalking
下载好skywalking以后,如果我们使用的是es作为存储数据库,我们需要改:apache-skywalking-apm-bin\config\application.yml文件,修改内容如下:
改成自己对应的es安装路径即可。
(4)启动skywalking
Windows:
Linux:
(5)访问ui页面:(localhost:8080)
(6)客户端接入:
接如项目架构如下
Agent:
Agent 探针可以在我们不修改代码的情况下,对Java 应用上用的到组件进行动态监控,获取运行时数据,发布到OAP上进行统计和存储。
每个客户端启动时带如下参数:
Java -javaagent:E:\\apache-skywalking-apm-bin\\agent\\skywalking-agent.jar -Dskywalking.agent.service_name=product-service -Dskywalking.collector.backend_service=127.0.0.1:11800 -jar product-service-1.0-SNAPSHOT.jar
参数含义:
-javaagent 使用agent代理
-Dskywalking.agent.service_name : 在skywalking界面展示的服务名称
-Dskywalking.collector.backend_service skywaking 服务端地址
(7)接入客户端界面展示
三、SkyWaling与zipkin性能测试对比篇
1.Jmeter参数含义:
2.SkyWaling性能测试:
(1)每秒100个请求
(2)每秒500个请求
(3)每秒1000个请求
3.zipkin性能测试:
(1)每秒100个请求
(2)每秒500个请求
(3)每秒1000个请求
4.Skywalking与zinkin对比
1. Skywalking功能更强大,但是通过测试我们可以看到,在同等条件下,zipkin对接口性能的影响更小。
2. zipkin的链路监控粒度相对相对于skywalking粒度没有那么细。
3. skywalking 还支持20+的中间件、框架、类库,比如:主流的dubbo、Okhttp,还有DB和消息中间件,所以skywalking链路调用分析比zipkin完备些。
四、总结
如果服务的并发没那么高需要而需要追踪的信息比较多时,推荐使用Skywalking,如果系统并发比较高,对性能有更高的要求,但是对追踪的信息没那么多时推荐使用zipkin,因为随着并发的增加zipkin的表现比skywalking更加出色。