当前位置: 首页 > news >正文

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类型:

  1. Entry Span(入口跨度):表示请求进入系统的第一个组件,通常是客户端发起的请求。Entry Span记录了请求的开始时间、请求的路径和入口点等信息。

  2. Exit Span(出口跨度):表示请求离开系统的最后一个组件,通常是系统对外提供的服务。Exit Span记录了请求的结束时间、请求的路径和出口点等信息。

  3. Local Span(本地跨度):表示请求在系统内部的一个组件间的调用。Local Span记录了请求在组件内的操作和耗时等信息。

  4. Remote Span(远程跨度):表示请求调用了位于不同主机或网络节点上的远程组件。Remote Span记录了请求调用远程组件的耗时和网络通信等信息。

  5. Error Span(错误跨度):表示系统中发生了错误或异常的Span。Error Span记录了错误发生的详细信息,如错误类型、错误码和错误堆栈等。

这些Span类型涵盖了分布式系统中常见的调用和操作场景,通过区分不同类型的Span,可以更好地分析和优化系统的性能和稳定性。

解读:

        在链路追踪中,Span(跨度)是最小的单元,它代表了一次调用或操作的单个组件。每个Span记录了该组件的关键信息,如开始时间、结束时间、耗时等。通过组合多个Span,就可以构成一个完整的Trace(追踪),描述了请求在分布式系统中的流转过程。

由于Span是最小的单元,它可以记录组件间的调用关系、性能指标和错误状态等重要信息。通过分析和观察这些Span,可以了解请求的路径、耗时和错误等关键指标,从而进行性能优化、故障排查和系统调优。所以在链路追踪中,Span是对系统进行监测和分析的基本单元。

        通过最小单元来对每一次具体的分布式服务之中的调用进行描述

图示:

        

 

图解: 

假设我们有一个在线购物系统,由以下几个组件组成:网关服务(Gateway Service)、用户服务(User Service)、订单服务(Order Service)和支付服务(Payment Service)。现在我将模拟一个用户下单并完成支付的链路,并说明各个Span的类型和作用。

  1. 用户发起下单请求,请求进入系统中的网关服务(Entry Span)。Entry Span记录了请求的开始时间、路径和入口点等信息。

  2. 网关服务调用用户服务来验证用户信息并获取用户购物车内容(Local Span)。这个调用生成了一个Local Span,记录了网关服务调用用户服务的操作和耗时等信息。

  3. 用户服务内部发现用户购物车中有商品,需要调用订单服务生成订单(Remote Span)。这个调用生成了一个Remote Span,记录了用户服务调用订单服务的耗时和网络通信情况。

  4. 订单服务接收到请求并生成订单后,需要调用支付服务完成支付(Local Span)。这个调用生成了一个Local Span,记录了订单服务调用支付服务的操作和耗时等信息。

  5. 支付服务完成支付操作后,返回支付结果给订单服务(Exit Span)。这个过程生成了一个Exit Span,表示请求离开系统的最后一个组件。

  6. 如果在任意一个组件中发生了错误,比如用户服务调用订单服务时发生了超时错误,会生成一个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学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

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、你平时去哪些网站进行学习、挖漏洞提交到…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 ​二、实现思路 总体思路: 用户通过Gradio界面上…...