0
点赞
收藏
分享

微信扫一扫

分布式链路追踪-常用技术选型


1. 背景介绍

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

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

2. 实现原理

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

分布式链路追踪-常用技术选型_数据

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

分布式链路追踪-常用技术选型_数据_02

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

分布式链路追踪-常用技术选型_java_03


分布式链路追踪-常用技术选型_分布式_04

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

分布式链路追踪-常用技术选型_分布式_05

3. 方案比较

目前主流的链路追踪工具:​​Google​​​的​​Dapper​​​,阿里的鹰眼,大众点评的​​CAT​​​,​​Twitter​​​的​​Zipkin​​​,​​LINE​​​的​​pinpoint​​​,国产的​​skywalking​​。

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

分布式链路追踪-常用技术选型_java_06

  • 探针的性能

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

  • ​**collector**​的可扩展性

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

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

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

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

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

  • 完整的调用链应用拓扑

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

4. 性能对比

分布式链路追踪-常用技术选型_数据_07

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 逻辑上分为四部分: 探针、 平台后端、存储和用户界面。

分布式链路追踪-常用技术选型_链路_08

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


举报

相关推荐

0 条评论