分布式链路追踪

这篇具有很好参考价值的文章主要介绍了分布式链路追踪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

1、背景

随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

2、微服务架构下的问题

在大型系统的微服务化构建中,一个系统会被拆分成许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

上图为一个简单的下单系统,里面有n个微服务。现在用户在UI界面下单一个商品,但弹出错误提示"系统内部错误":

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

此时,开发运维人员要排查异常具体是由哪个微服务引起的就得去逐个看相关的服务日志,效率低下。

3、链路追踪

分布式链路追踪(Distributed Tracing) 就是将一次分布式请求还原成调用链路,进行日志记录、性能监控,并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等,以便帮助开发人员快速定位和解决分布式系统中的性能问题和故障。

链路跟踪主要功能:

  • 故障快速定位:可以通过调用链结合业务日志快速定位错误信息。

  • 链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。

  • 链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。

☀ 更多参考这篇:http://bigbully.github.io/Dapper-translation/

4、核心概念

概念1:trace

trace是要追踪的一个链路,即一个请求经过所有服务的路径,可以用下面树状的图形表示:

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

traceid串联起来,就形成了一条完成的链路。

概念2:span

从上面的trace链路可以看到,请求过来调用了服务A,服务A又调用了服务B和服务C,但先调用了B还是C并未标明,因此有了span这个概念。span表达了服务的调用顺序和调用关系。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

  • 同一层级parent id相同,span id不同,span id从小到大表示请求的顺序,因此服务A是先调用了服务B,再调服务C
  • 上下层级代表调用关系,如图中服务C的span id为2,而服务D的parent id为2,这就表示服务C和服务D形成了父子关系,且是服务C调用服务D

到此,通过事先在日志中埋点,找出相同traceId的日志,再加上parent id和span id就可以将一条完整的请求调用链串联起来。

概念3Annotations

Annotations 用于用户自定义事件,用来辅助定位问题。包含四个注解信息:

  • cs:Client Start,表示客户端发起请求
  • sr:ServerReceived,表示服务端收到请求
  • ss:Server Send,表示服务端完成处理,并将结果发送给客户端
  • cr:ClientReceived,表示客户端获取到服务端返回信息

分布式链路追踪,SpringCloud,分布式,trace,链路追踪
上图中描述了一次请求和响应的过程,四个点也就是对应四个Annotation事件。如果要计算一次调用的耗时,只需要将客户端接收的时间点减去客户端开始的时间点,也就是图中时间线上的T4 - T1。如果要计算客户端发送网络耗时,也就是图中时间线上的T2 - T1:

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

概念4:采样

由于每一个请求都会生成一个链路,如果对每一个请求都进行数据采集和存储,性能损耗太大,因此使用采样的方式。比如每秒有1000个请求访问系统,设置了采样率为1/1000,那么只会上报一个请求到存储端。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

概念5:埋点

埋点是指将链路追踪的代码插入到应用程序中,以便在应用程序执行期间收集所需的数据。这些数据通常包括系统调用和服务的名称,执行时间,响应时间和错误信息。通过分析这些数据,开发人员可以确定系统中哪些服务或系统调用是性能瓶颈,并确定它们对系统整体性能的影响。

概念6:存储

链路中的span数据经过收集和上报后会集中存储在一个地方,如BigTable数据仓库、ElasticSearch、 HBase、In-memory DB

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

5、技术选型对比

基于链路追踪的基本原理,各大厂商给出了各自的落地方案,如:

  • Twitter的Zipkin
  • Uber的Jaeger
  • 韩国公司开发的pinpoint
  • Apache开源的skywalking
  • 阿里的鹰眼
  • 美团的Mtrace
  • 滴滴Trace
  • 新浪的Watchman
  • 京东的Hydra
  • 大众点评的cat

关于技术选型,各项指标对比:

分布式链路追踪,SpringCloud,分布式,trace,链路追踪

地址如下:

zipkin  -> https://zipkin.io/

Jaeger  -> https://www.jaegertracing.io/

Pinpoint  -> https://github.com/pinpoint-apm/pinpoint

SkyWalking  ->  http://skywalking.apache.org/

6、zipkin

Zipkin 是 Twitter 的一个开源项目,基于 Google Dapper 实现,致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

分布式链路追踪,SpringCloud,分布式,trace,链路追踪
zipkin架构中,主要四部分:

  • Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin 内部处理的 Span 格式,以支持后续的存储、分析、展示等功能
  • Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中
  • RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等
  • Web UI:UI 组件,基于 API 组件实现的上层应用。通过 UI 组件用户可以方便而有直观地查询和分析跟踪信息

参考文章及图片来源:https://zhuanlan.zhihu.com/p/284181372文章来源地址https://www.toymoban.com/news/detail-572811.html

到了这里,关于分布式链路追踪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链路追踪详解(三):分布式链路追踪标准的演进

    目录 Google Dapper Twitter Zipkin Uber Jaeger OpenTracing 和 OpenCensus OpenTelemetry 小结 分布式链路追踪是现代云计算和微服务架构中一个关键技术,可以让开发者和运维团队理解和监控服务请求在复杂系统中的完整流转路径。分布式链路追踪技术的发展经历了从早期的专有解决方案到现代

    2024年02月05日
    浏览(28)
  • 分布式链路追踪

    随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。 在大型系统的微

    2024年02月16日
    浏览(28)
  • 进阶分布式链路追踪

                            https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “ RocketMQ 消息中间件实战派上下册”是我既“ Spring Cloud Alibaba 微服务架构实战派上下册”之后,又一本历时超过 1 年半的巨无霸技术实战类型的书籍。 为了提高读者阅读本书的体验性,本书

    2024年02月02日
    浏览(33)
  • 分布式链路追踪概述

    随着系统设计变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。往往前端的一个请求需要经过多个微服务、跨越多个数据中心才能最终获取到结果,如下图 并且随着业务的不断扩张,服

    2024年02月13日
    浏览(26)
  • 什么是分布式链路追踪

    随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。 在大型系统的微

    2024年02月16日
    浏览(38)
  • 链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述

    目录 OpenTelemetry 是什么? OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是一个为实现可观测性的开源的框架和工具集,用于创建和管理遥测数据,例如 traces,、metric

    2024年02月04日
    浏览(35)
  • 分布式链路追踪之SkyWalking

      在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模块,哪些节点及调用的先后顺序?如何定位每个模块的性能问题?本

    2023年04月20日
    浏览(34)
  • SkyWalking分布式链路追踪学习

    实际生产中,面对几十个、甚至成百上千个的微服务实例,如果一旦某个实例发生宕机,如果不能快速定位、提交预警,对实际生产造成的损失无疑是巨大的。所以,要对微服务进行监控、预警,对微服务的调用链路进行监控,迅速定位问题 SkyWalking下载 SkyWalking官网 elastic

    2024年02月07日
    浏览(31)
  • 微服务之分布式链路追踪

    在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 在分布式与微服务场景下,

    2024年04月22日
    浏览(23)
  • 分布式链路追踪如何跨线程

    我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 我们可以对以前的 Runable 和 Callable 进行增强。 可以使用 ali 已经存在的实现方式。 TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题 核心的实现思路如下: 1)异步执行前,把当前线程的 MDC 信息放入

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包