SkyWalking链路追踪中span全解
基本概念
在SkyWalking链路追踪中,Span(跨度)是Trace(追踪)的组成部分之一。Span代表一次调用或操作的单个组件,可以是一个方法调用、一个HTTP请求或者其他类型的操作。
每个Span都包含了一些关键的信息,如开始时间、结束时间、耗时、所属的Trace ID、Span ID等。开始时间和结束时间记录了Span的执行时间,而Trace ID和Span ID用于标识Span所属的Trace和上下文关系。
通过记录和分析每个Span的信息,可以了解每个组件的性能指标和调用关系。例如,可以查看每个Span的耗时,从而定位潜在的性能瓶颈;还可以通过分析Span之间的关系,了解请求在分布式系统中的流转过程。
Span的概念在SkyWalking链路追踪中非常重要,它是分析和优化分布式系统性能的基础。通过对Span数据的收集和分析,开发人员可以深入了解系统中每个组件的性能和调用关系,进而改进系统的可靠性和性能。
span的ID
Span ID(Span Identifier)是用来唯一标识一个Span的ID。在分布式系统中,请求链路可能会涉及多个组件和服务,每个组件对应一个Span。为了跟踪和关联不同的Span,每个Span都会分配一个唯一的Span ID。
通过将Span ID与父Span的ID关联起来,我们可以在整个请求链路中追踪和关联不同组件的Span。Span ID可以通过生成唯一的标识符,如UUID(Universally Unique Identifier),保证其在链路中的唯一性。
通过使用Span ID,我们可以轻松地将不同组件的Span联系在一起,并对整个请求链路进行紧密的追踪和分析。这对于分布式系统调试、性能优化和故障排查非常有帮助。
一个请求链路中的不同Span看作是一个链表结构。每个Span都有一个唯一的Span ID作为标识符,并且可以有一个或多个父Span ID和一个或多个子Span ID。
通过父子Span ID的关联,我们可以在链路中建立起Span之间的关系,形成一个有序的链表结构。父Span和子Span之间的关系可以帮助我们理解请求的调用顺序和调用关系。
通过这种链表结构,我们可以高效地追踪和分析请求的调用链路。我们可以从Entry Span开始,根据Span ID和父子Span ID的关联,逐个遍历Span,了解请求的调用顺序和每个组件的性能情况。
这种链表结构在分布式系统的调试、故障排查和性能优化中非常有用,帮助我们理解请求的路径、调用关系和性能变化。
一个Span只能有一个父Span ID,但可以有多个子Span ID。换句话说,一个Span可以被多个子Span所关联,但只能有一个父Span
架构体系
span类型:
在SkyWalking链路追踪中,Span(跨度)可以包含多种类型,用于表示不同种类的调用和操作。下面是一些常见的Span类型:
-
Entry Span(入口跨度):表示请求进入系统的第一个组件,通常是客户端发起的请求。Entry Span记录了请求的开始时间、请求的路径和入口点等信息。
-
Exit Span(出口跨度):表示请求离开系统的最后一个组件,通常是系统对外提供的服务。Exit Span记录了请求的结束时间、请求的路径和出口点等信息。
-
Local Span(本地跨度):表示请求在系统内部的一个组件间的调用。Local Span记录了请求在组件内的操作和耗时等信息。
-
Remote Span(远程跨度):表示请求调用了位于不同主机或网络节点上的远程组件。Remote Span记录了请求调用远程组件的耗时和网络通信等信息。
-
Error Span(错误跨度):表示系统中发生了错误或异常的Span。Error Span记录了错误发生的详细信息,如错误类型、错误码和错误堆栈等。
这些Span类型涵盖了分布式系统中常见的调用和操作场景,通过区分不同类型的Span,可以更好地分析和优化系统的性能和稳定性。
解读:
在链路追踪中,Span(跨度)是最小的单元,它代表了一次调用或操作的单个组件。每个Span记录了该组件的关键信息,如开始时间、结束时间、耗时等。通过组合多个Span,就可以构成一个完整的Trace(追踪),描述了请求在分布式系统中的流转过程。
由于Span是最小的单元,它可以记录组件间的调用关系、性能指标和错误状态等重要信息。通过分析和观察这些Span,可以了解请求的路径、耗时和错误等关键指标,从而进行性能优化、故障排查和系统调优。所以在链路追踪中,Span是对系统进行监测和分析的基本单元。
通过最小单元来对每一次具体的分布式服务之中的调用进行描述
图示:
图解:
假设我们有一个在线购物系统,由以下几个组件组成:网关服务(Gateway Service)、用户服务(User Service)、订单服务(Order Service)和支付服务(Payment Service)。现在我将模拟一个用户下单并完成支付的链路,并说明各个Span的类型和作用。
-
用户发起下单请求,请求进入系统中的网关服务(Entry Span)。Entry Span记录了请求的开始时间、路径和入口点等信息。
-
网关服务调用用户服务来验证用户信息并获取用户购物车内容(Local Span)。这个调用生成了一个Local Span,记录了网关服务调用用户服务的操作和耗时等信息。
-
用户服务内部发现用户购物车中有商品,需要调用订单服务生成订单(Remote Span)。这个调用生成了一个Remote Span,记录了用户服务调用订单服务的耗时和网络通信情况。
-
订单服务接收到请求并生成订单后,需要调用支付服务完成支付(Local Span)。这个调用生成了一个Local Span,记录了订单服务调用支付服务的操作和耗时等信息。
-
支付服务完成支付操作后,返回支付结果给订单服务(Exit Span)。这个过程生成了一个Exit Span,表示请求离开系统的最后一个组件。
-
如果在任意一个组件中发生了错误,比如用户服务调用订单服务时发生了超时错误,会生成一个Error Span。Error Span记录了错误的详细信息,如错误类型、错误码和错误堆栈等。
通过以上模拟的链路,我们可以看到各个Span在请求过程中的作用。Entry Span标识了请求的起点,Local Span记录了组件内部的操作,Remote Span记录了远程调用的情况,Exit Span表示请求的终点,而Error Span帮助我们定位和解决错误。这些Span记录了关键的信息,帮助我们了解请求的路径、耗时和错误等情况,从而进行性能优化、故障排查和系统调优。
产生local span与产生remote span
如果在一个服务器上的服务调用另一个在同一台服务器上的服务,则可以将其称为Local Span。这是因为这个调用是在同一个服务器内部完成的。
而如果一个服务器上的服务需要调用位于不同主机或网络节点上的服务(即跨服务器),则可以将其称为Remote Span。这种情况下,跨服务器的调用会涉及网络通信和跨越不同物理设备或虚拟机的操作。
需要注意的是,Local Span和Remote Span并不仅仅取决于服务部署在不同的服务器上,还取决于调用方式和组件的网络结构。有时候,即使服务部署在不同的服务器上,但是它们通过本地网络进行调用,仍然可以被视为Local Span。因此,在确定Span类型时,除了服务器的物理位置外,还需要考虑组件之间的调用方式和网络结构。
离开系统的最后一个服务产生exit span
Exit Span表示请求离开系统的最后一个组件,但并不一定是直接返回给用户。在我们的示例中,支付服务完成支付操作后,返回支付结果给订单服务,它是Exit Span的组件。这个Exit Span表示请求离开系统的最后一个组件,但请求可能还需要经过其他组件,如订单服务可能会继续将结果返回给网关服务,最终才返回给用户。
Exit Span是描述请求链路中离开系统的最后一个组件,它并不指明返回值是直接给用户。请求可能还需要经过多个组件、服务或层级,直到最终返回给用户。Exit Span帮助我们追踪请求的终点,但不一定表示直接返回给用户。
在这个链路中,Exit Span表示支付服务完成支付操作后,将支付结果返回给订单服务。这个Exit Span是请求离开系统的最后一个组件,我们可以追踪请求的终点。但这个请求的返回值可能还需要经过其他组件,如订单服务可能会继续将结果返回给网关服务,最终才返回给用户。所以在整个链路中,Exit Span标识了请求离开系统的最后一个组件。
Exit Span主要是用来标识请求离开了系统的最后一个组件。它帮助我们追踪请求的终点,但不一定表示请求的返回值直接给了用户。在整个请求链路中,一个Exit Span标识了离开了当前组件,但请求可能还需要经过其他组件、服务或层级,直到最终返回给用户。Exit Span的作用是帮助我们了解请求的终点,而不仅仅表示返回值直接给了用户。
相关文章:

SkyWalking链路追踪中span全解
基本概念 在SkyWalking链路追踪中,Span(跨度)是Trace(追踪)的组成部分之一。Span代表一次调用或操作的单个组件,可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…...
【前端知识】React 基础巩固(三十一)——Redux的简介
React 基础巩固(三十一)——Redux 一、Redux是个纯函数 概念 纯函数(确定的输入一定产生确定的输出,函数在执行过程中不产生副作用): 在程序设计中,若一个函数符合以下条件,那么这个函数就被称为纯函数…...

拦截Bean使用之前各个时机的Spring组件
拦截Bean使用之前各个时机的Spring组件 之前使用过的BeanPostProcessor就是在Bean实例化之后,注入属性值之前的时机。 Spring Bean的生命周期本次演示的是在Bean实例化之前的时机,使用BeanFactoryPostProcessor进行验证,以及在加载Bean之前进…...

RT thread 之 Nand flash 读写过程分析
文章目录 前言:什么是Nand Flash?1、Nand Flash 读取步骤2、从主存读到Cache2.1 在标准spi接口下读取过程2.2 测试时序(SPI频率30MHz) 3.从Cache读取数据3.1在标准spi接口读取过程测试时序 前言:什么是Nand Flash&…...

独立站最全出单营销指南,新手卖家赶紧学起来吧!
这是一个需要投入大量时间和精力的挑战,但只有经过筛选在众多品牌和渠道中找到最适合自己的营销策略,才能成功。 新手商家经常会发现自己有很多可以改进的地方:品牌的颜色、字体以及其他一些细节。但真正走向成熟的商家会意识到,…...

Git移除commit过的大文件
前言:在提交推送本地更改至仓库时,误将大文件给提交了,导致push时报错文件过大,因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径,则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询…...

再见 Spring Boot 1.X ,Spring Boot 2.X 走向舞台中心
2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维护到2019年8月1日。 1.5.x 将会…...

Jsonp劫持
JSONP 介绍 jsonp是一种协议,准确的说,他是json的一种使用模式,为了解决Json受同源策略限制的问题。 基本语法 JSONP的基本语法为:callback({“name”:”test”, “msg”:”success”}) 常见的例子包括函数调用(如…...

STM32CubeIDE(串口)
目录 一、轮询模式 1.1 配置USART2为异步模式 1.2 500ms发送一次消息 1.3 通信结果 1.4 串口控制LED 二、中断收发 2.1 开启中断 2.2 中断发送接收 2.2.1 中断发送只需要调用接口 2.2.2 中断接收 2.3 实验结果 三、DMA模式与收发不定长数据 3.1 DMA通道配置 3.2 DMA…...

Python编程很简单,四步菜鸟到高手(文末送书5本)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

Labview串口通信MSComm实现串口收发
文章目录 前言一、什么是 MSComm二、MSComm 控件下载三、MSComm 控件的注册四、使用 MSComm 控件1、前面板放置控件2、MSComm 的常用属性3、MSComm 控件的事件 五、实现串口收发1、搭建虚拟串口2、发送测试3、接收测试4、后面板核心程序框图 六、程序自取 前言 本文介绍使用 A…...
字节跳动 EB 级 Iceberg 数据湖的机器学习应用与优化
深度学习的模型规模越来越庞大,其训练数据量级也成倍增长,这对海量训练数据的存储方案也提出了更高的要求:怎样更高性能地读取训练样本、不使数据读取成为模型训练的瓶颈,怎样更高效地支持特征工程、更便捷地增删和回填特征。本文…...

CentOS 安装Mysql8
1.检查是否已经安装mysql,停止mysql服务,删除mysql ps -ef | grep -i mysql systemctl stop mysqld rpm -e mysql 2.配置仓库 更新秘钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 安装mysql8的yum源 rpm -Uvh https://dev.mysql.…...

3-Linux实操
Linux实践操作 开关机、重启、用户登陆注销关机&重启用户登陆和注销 用户管理添加用户修改用户密码删除用户查询用户信息切换用户查看当前用户用户组的添加和删除用户和组相关文件 实用指令指定运行级别init 命令帮助指令文件目录类时间日期类搜索查找类🔍压缩和…...
Yarn 集群的架构和工作原理
Yarn 的基本设计思想是将 MapReduce V1 中的 JobTracker 拆分为两个独立的服务:ResourceManager 和 ApplicationMaster。 ResourceManager 负责整个系统的资源管理和分配,ApplicationMaster 负责单个应用程序的管理。 ResourceManager RM 是一个全局的资…...
PostgreSQL-视图-03-查询对象依赖关系视图-dba_dependencies
PostgreSQL查询对象依赖关系视图 -- PostgreSQL查询对象依赖关系视图drop view if exists tzq.dba_dependencies; create view tzq.dba_dependencies as with source_obj as (select sp.oid,sp.proname,unnest(string_to_array(regexp_replace(regexp_replace(lower(sp.prosrc…...

Vue style中的 scoped 属性
Vue 中存在 scoped 属性,HTML5中也存在一个 scoped 属性,而且,这两者都是针对 css 样式处理的属性,所以很多文章在 解释 Vue scoped 的时候,都会把两者混为一谈,直接进把 HTML5 scoped 的定义搬到 Vue scop…...

移动端适配rem
1.安装amfe-flexible和postcss-pxtorem, npm install amfe-flexible --save npm install postcss-pxtorem5.1.1 (这里我使用的postcss-pxtorem是5.1.1版本)或者在pageage.json中写入 "amfe-flexible": "^2.2.1","postcss-pxtorem": …...

Go语言开发小技巧易错点100例(八)
往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…...

100个网络安全测试面试题
1、Burpsuite常用的功能是什么? 2、reverse_tcp和bind_tcp的区别? 3、拿到一个待检测的站或给你一个网站,你觉得应该先做什么? 4、你在渗透测试过程中是如何敏感信息收集的? 5、你平时去哪些网站进行学习、挖漏洞提交到…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...