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、你平时去哪些网站进行学习、挖漏洞提交到…...
暗黑破坏神2存档修改神器:从入门到精通的完整指南
暗黑破坏神2存档修改神器:从入门到精通的完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 如果你是暗黑破坏神2的忠实玩家,一定遇到过反复刷装备的枯燥、角色培养的漫长过程。d2s-editor作为一款强…...
暖心指南:儿童心理医院真实案例分享
行业痛点分析当前长沙地区儿童心理健康服务面临多重技术挑战。数据显示,2023年长沙市0-18岁青少年中,约有18.6%存在不同程度的情绪或行为问题,其中焦虑障碍、注意力缺陷多动障碍(ADHD)及学习困难占比超六成,…...
拒绝“调包侠”!从Atchem2安装到RIR敏感性分析,揭秘大气O3生成机制的高阶玩法--MCM箱模型建模方法及大气O3来源解析实践技术
在大气臭氧污染已成为我国“十四五”期间环境治理核心挑战的当下,深入解析其光化学生成机制与前体物控制策略,是科研工作者亟待攻克的关键课题。MCM箱模型凭借其包含约17000个反应的详尽化学机理,已成为探究O3生成潜势与敏感性分析的权威工具…...
新手入门网络安全:用快马AI生成你的第一个密码强度检测器
最近在自学网络安全基础知识,发现密码强度检测是个很好的入门实践。作为新手,我尝试用InsCode(快马)平台的AI辅助功能,快速生成了一个密码强度检测器,整个过程特别适合零基础学习者。这里记录下实现思路和关键要点: 密…...
DXVK:彻底解决Linux游戏兼容性难题的Vulkan翻译层
DXVK:彻底解决Linux游戏兼容性难题的Vulkan翻译层 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 你是否曾经因为心爱的Windows游戏无法在Linux上运行而感到…...
Excel数据合并工具软件:一键汇总无压力
办公经常收到多份表格需要合并, Excel合并常踩坑。 单元格合表没用。 表头丢了更闹心。 为啥用它? 之前工具处理合并单元格失效、表头无法保留。 这款刚好补上短板。 核心功能 Excel数据合并工具。 省心好用。 核心就一事: 多Excel…...
3分钟彻底掌握:Windows Defender永久禁用工具defender-control完全指南 [特殊字符]️➡️[特殊字符]
3分钟彻底掌握:Windows Defender永久禁用工具defender-control完全指南 🛡️➡️🚫 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://…...
MJh代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线
在当今数字化时代,保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取?是否希望防止竞争对手通过反编译分析你的核心业务逻辑?今天,我将为你详细介绍一款强大的开源混淆工具——Obfuscar,…...
3分钟免费搞定Axure RP中文汉化:完整语言包安装指南
3分钟免费搞定Axure RP中文汉化:完整语言包安装指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的…...
从系统编程到 JavaScript/TypeScript
然而,在通往 AGI(通用人工智能)的道路上,一个反直觉的现象正在发生。如果你拆解当下最热门的 AI 项目,你会惊讶地发现:TypeScript 和 JavaScript 正在成为 AI 应用层的“官方语言”。OpenClaw (ClawdBot): …...
