侧边栏壁纸
博主头像
清如许博主等级

努力成长为一颗大树,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找

  • 累计撰写 80 篇文章
  • 累计创建 44 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

A006-分布式链路追踪-技术选型.md

清如许
2022-08-05 / 0 评论 / 0 点赞 / 9 阅读 / 2,109 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-08-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

| --- | --- | --- |
| 更新日期 | 2022年05月18日 | 作 者 | 张留杨 |
| 保密等级 | C | 开放范围 | 研发测试部 |

版本历史

版 本更新日期作 者备注
1.0.02022年05月18日张留杨新建文档

1. 背景介绍

随着微服务架构的流行,一次请求往往需要涉及到多个服务,需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
单体架构中可以使用 AOP 在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间,使用 AOPcatch 住异常也可知道是哪里的调用导致的异常。而针对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:

  • 如何串联整个调用链路,快速定位问题?
  • 如何缕清各个微服务之间的依赖关系?
  • 如何进行各个微服务接口的性能分折?
  • 如何跟踪整个业务流程的调用处理顺序?

2. 实现原理

  • 一个完整请求链路的追踪IDtraceid)用于查出本次请求调用的所有服务,每一次服务调用的跨度IDspanid)用来记录调用顺序

  • 上游服务parenetid用来记录调用的层级关系

  • 调用时间timestamp,把请求发出、接收、处理的时间都记录下来,计算业务处理耗时和网络耗时,然后用可视化界面展示出来每个调用链路,性能,故障


  • 还可以记录一些其他信息,比如发起调用服务名称、被调服务名称、返回结果、IP、调用服务的名称等,最后,我们再把相同spanid的信息合成一个大的span块,就完成了一个完整的调用链。


3. 方案比较

目前主流的链路追踪工具:GoogleDapper,阿里的鹰眼,大众点评的CATTwitterZipkinLINEpinpoint,国产的skywalking

  • **Zipkin**Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  • **Pinpoint**:韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  • **Skywalking**:国产的优秀APM组件,是一个基于字节码注入的调用链分析,对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
  • **CAT**:大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

image.png
主要对比项 :

  • 探针的性能

主要是agent对服务的吞吐量、CPU和内存的影响。微服务的规模和动态性使得数据收集的成本大幅度提高。 skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显。

  • **collector**的可扩展性

能够水平扩展以便支持大规模服务器集群。 zipkin支持多个实例订阅MQ,异步消费监控信息。skywalking支持单机和集群模式,使用gRPC通信。

  • 全面的调用链路数据分析

提供代码级别的可见性以便轻松定位失败点和瓶颈。 zipkin的链路监控粒度到接口级别。skywalking 支持众多的中间件、框架、类库。pinpoint数据分析最完备,提供代码级别的可见性以便轻松定位失败点和瓶颈。

  • 对于开发透明,容易开关

添加新功能而无需修改代码,容易启用或者禁用。 Zipkin它要求在需要时修改代码。skywalkingpinpoint基于字节码增强的方式,不需要修改代码,并且可以收集到字节码中的更多精确的信息 。

  • 完整的调用链应用拓扑

自动检测应用拓扑,帮助你搞清楚应用的架构。 pinpoint界面显示的更加丰富,具体到调用的DB名,zipkin的拓扑局限于服务于服务之间 。

4. 性能对比


图中蓝色代表未使用 SkyWalking 的表现,橙色代表使用了 SkyWalking 的表现,以上是在 TPS5000 的情况下测出的数据,可以看出,不论是 CPU,内存,还是响应时间,使用 SkyWalking 带来的性能损耗几乎可以忽略不计。
image.png
模拟了三种并发用户:500,750,1000。使用** **jmeter 测试,每个线程发送30个请求,设置等待响应时间为10ms。使用的采样率为1,即100%。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。
从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPUmemory的影响,在内部服务器进行的压测,对CPUmemory的影响都差不多在10%之内。

5. SkyWalking 简介

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。通过加载探针以非侵入式的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。

6. Skywalking 主要功能特性

  • 多种监控手段,可以通过语言探针和service mesh获得监控的数据;
  • 支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;
  • 轻量高效,无需大数据平台和大量的服务器资源;
  • 模块化,UI、存储、集群管理都有多种机制可选;
  • 支持告警;
  • 优秀的可视化解决方案;

7. Skywalking 架构

Skywalking 逻辑上分为四部分: 探针、 平台后端、存储和用户界面。
image.png

  • 探针:基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。
  • 平台后端:支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry, Zipkin 追踪格式化等。 甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统自定义聚合分析。
  • 存储:通过开放的插件化的接口存放 SkyWalking 数据。可以选择一个既有的存储系统,ElasticSearch, H2 或 MySQL 集群。也可以选择自己实现一个存储系统。
  • **UI:**一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
0

评论区