分布式链路追踪

news2024/11/24 3:12:25

在这里插入图片描述

文章目录

  • 1、背景
  • 2、微服务架构下的问题
  • 3、链路追踪
  • 4、核心概念
  • 5、技术选型对比
  • 6、zipkin

1、背景

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

在这里插入图片描述

2、微服务架构下的问题

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

在这里插入图片描述

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

在这里插入图片描述

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

3、链路追踪

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

链路跟踪主要功能:

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

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

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

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

4、核心概念

概念1:trace

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

在这里插入图片描述

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

概念2:span

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

在这里插入图片描述

  • 同一层级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,表示客户端获取到服务端返回信息

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

在这里插入图片描述

概念4:采样

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

在这里插入图片描述

概念5:埋点

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

概念6:存储

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

在这里插入图片描述

5、技术选型对比

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

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

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

在这里插入图片描述

地址如下:

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 实现,致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

在这里插入图片描述
zipkin架构中,主要四部分:

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

参考文章及图片来源:https://zhuanlan.zhihu.com/p/284181372

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流水灯——FPGA

文章目录 前言一、流水灯介绍二、系统设计1.模块框图2.RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 每隔0.2s循环亮起LED灯 一、流水灯介绍 从LED0开始亮起到LED3又回…

如何定制自己的应用层协议?|面向字节流|字节流如何解决黏包问题?如何将字节流分成数据报?

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

基于ssm的社区生活超市的设计与实现

博主介绍:专注于Java技术领域和毕业项目实战。专注于计算机毕设开发、定制、文档编写指导等,对软件开发具有浓厚的兴趣,工作之余喜欢钻研技术,关注IT技术的发展趋势,感谢大家的关注与支持。 技术交流和部署相关看文章…

SpringBoot拦截器

一、SpringBoot拦截器介绍 Spring Boot中的拦截器是一种用于在处理请求之前或之后执行特定操作的组件。拦截器通常用于实现对请求进行预处理、日志记录、权限验证等功能。 在Spring Boot中,可以使用HandlerInterceptor接口来定义自己的拦截器,并通过配…

流水灯实现

文章目录 一、流水灯二、代码实现三、引脚分配 一、流水灯 流水灯指的是LED像水流一样点亮,即LED依次点亮但不立刻熄灭,等到4个LED都点亮后,再把所有灯一次性熄灭。 二、代码实现 module horse_led(input wire clk,input wire rst_n,output…

记录管理系统

简单的记录管理系统,适用于保存表格数据,可以用来替代Excel软件保存数据,提供可视化拖动组件用于自定义数据列,数据存到数据库,相比于Excel,更易保存,易搜索。 例如创建合同记录数据&#xff0…

【电子学会】2023年05月图形化四级 -- 计算圆的面积和周长

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径,程序计算出圆的面积和周长,圆的面积等于3.14*半径*半径;圆的周长等于2*3.14*半径。 1. 准备工作 (1)保留舞台中的小猫角色和白色背景; 2…

MySQL数据表高级操作

一、克隆/复制数据表二、清空表,删除表内的所有数据删除小结 三、创建临时表四、MySQL中6种常见的约束1、外键的定义2、创建外键约束作用3、创建主表test44、创建从表test55、为主表test4添加一个主键约束。主键名建议以"PK_”开头。6、为从表test5表添加外键&…

Html利用Canvas绘制图形

今天接到粉丝私信,询问是否可以通过Canvas绘制一些图形,然后根据粉丝提供的模板图,通过Canvas进行模拟绘制,通过分析发现,图形虽然相对简单,但是如果不借助相应的软件,纯代码绘制还是稍微费些时…

机器学习:self supervised learning- Recent Advances in pre-trained language models

背景 Autoregressive Langeuage Models 不完整的句子,预测剩下的空的词语 sentence completion Transformer-based ALMs Masked language models-MLMs 预训练模型能将输入文本转成hidden feature representation 模型参数最开始是从预训练模型中拿到&#xf…

如何快速制作一个奶茶店小程序商城

如果你是一个奶茶店的老板,你可能会考虑开设一个小程序商城来增加销售渠道和提升品牌形象。那么,如何快速制作一个奶茶店小程序商城呢?下面我们将介绍一个简单的步骤供你参考。 首先,你需要登录乔拓云平台进入商城后台管理页面。在…

数据结构真题

数据结构真题 1. A. Bills of Paradise 线段树并查集四个操作: D x。标记大于等于 x 的第一个未标记的 a i a_i ai​;若没有,则不操作.F x。查询大于等于 x 的第一个未标记的 a i a_i ai​;若没有,则输出 1 0 12…

《UNUX环境高级编程》(9)进程关系

1、前言 2、终端登录 在早期的UNIX系统,用户用哑终端(用硬连接到主机)进行登录,因为连接到主机上的终端设备数是固定的,所以同时登录数也就有了已知的上限。 随着位映射图像终端的出现,开发出了窗口系统&…

数学分析:对偶映射

这个其实就是我们一致讨论的对偶映射,换了个马甲,差点认不出来了。本来是V->R 要变成U->R,就需要一个反向的V*->U*的映射。 注意这个式子,t属于U,phit转到了V,但是坐标也发生了变化,这…

2023西南赛区ciscn -- do you like read

Attack 打开后一个商城页面 在login as admin那里有个登录页面,账号admin,密码爆破即可得到admin123 也可以在book.php?bookisbn1进行sql注入得到密码,这里发现是没有注入waf的 登录进来是一个Book List的管理页面,同时在审计源…

【C语言】初阶指针(详细版)

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

RSA原理

RSA的历史 RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)在1977年一…

本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT

OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿、130亿、330亿和650亿这4种参数规模的模型,参数是指…

Lightening Network for Low-Light Image Enhancement 论文阅读笔记

这是2022年TIP期刊的一篇有监督暗图增强的文章 网络结构如图所示: LBP的网络结构如下: 有点绕,其基于的理论如下。就是说,普通的暗图增强就只是走下图的L1红箭头,从暗图估计一个亮图。但是其实这个亮图和真实的亮图…

54 # 可写流基本用法

内部也是基于 events 模块,fs.open、fs.write,如果文件不存在就会创建文件,默认会清空文件并写入 注意点:可写流的 highWaterMark 表示预期占用的内存(达到或者超过预期后返回的值就是false),默…