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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 分布式链路追踪-常用技术选型

1. 背景介绍

随着微服务架构的流行,一次请求往往需要涉及到多个服务,需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

单体架构中可以使用 AOP 在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间,使用 AOP 来 catch 住异常也可知道是哪里的调用导致的异常。而针对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:


如何串联整个调用链路,快速定位问题?

如何缕清各个微服务之间的依赖关系?

如何进行各个微服务接口的性能分折?

如何跟踪整个业务流程的调用处理顺序?

2. 实现原理

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

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

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

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

3. 方案比较

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


**Zipkin**:Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。


**Pinpoint**:韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。


**Skywalking**:国产的优秀APM组件,是一个基于字节码注入的调用链分析,对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。


**CAT**:大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

探针的性能

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


**collector**的可扩展性

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


全面的调用链路数据分析

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


对于开发透明,容易开关

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


完整的调用链应用拓扑

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

4. 性能对比

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

探针:基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。


平台后端:支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry, Zipkin 追踪格式化等。 甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统自定义聚合分析。


存储:通过开放的插件化的接口存放 SkyWalking 数据。可以选择一个既有的存储系统,ElasticSearch, H2 或 MySQL 集群。也可以选择自己实现一个存储系统。


**UI:**一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。


sticSearch, H2 或 MySQL 集群。也可以选择自己实现一个存储系统。


**UI:**一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
打赏
0
0
0
0
65
分享
相关文章
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
126 41
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
1144 0
一套分布式IM即时通讯系统的技术选型和架构设计
为了更好的理解分布式IM即时通讯系统的设计,我站在架构师的角度,在充分了解系统需求、业务流程和技术流程后,从全局视角为系统设定方案目标,对技术方案进行选型,对系统进行总体架构设计和分层架构设计,并梳理清楚发送消息的交互链路、单聊和群聊的交互链路。希望对你有帮助。
572 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
202 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
193 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
链路追踪(Tracing)其实很简单——分布式链路追踪的挑战与限制
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】作为一门新兴技术,分布式链路追踪的技术演进史并不算长,仅有十数年。目前,它仍处于不断被探索、快速迭代的周期。为了更好的了解与应用分布式链路追踪技术,我们来看下它目前面临的几项关键挑战与限制。关键挑战与应对分...
223 0
链路追踪(Tracing)其实很简单——分布式链路追踪的挑战与限制
链路追踪(Tracing)其实很简单——分布式链路追踪的应用与兴起
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】分布式链路追踪已经被广泛应用于中大型企业的 IT 运维领域,为分布式应用的性能诊断与稳定性保障提供了有效的帮助。此外,分布式链路追踪的开源和商业化生态也发展迅猛,大量独立服务商或云厂商纷纷跟进,共同推动了分...
262 0
链路追踪(Tracing)其实很简单——分布式链路追踪的应用与兴起
链路追踪(Tracing)其实很简单——分布式链路追踪的诞生
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】为了应对分布式环境下的不一致、模糊性等问题,人们试图通过请求粒度的轨迹追踪与数据透传,实现节点间的确定性关联,分布式链路追踪技术也由此诞生。里程碑事件:Google Dapper分布式链路追踪诞生的标志性事...
249 0
链路追踪(Tracing)其实很简单——分布式链路追踪的诞生

热门文章

最新文章