2021-07-16

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更加出色。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值