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的作用是帮助我们了解请求的终点,而不仅仅表示返回值直接给了用户。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.前端入门

文章目录 一、基础认知1.1 认识网页:1.2 五大浏览器1.3 Web标准 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、基础认知 1.1 认识网页: 1.网页由哪些部分组成? 文字、图片、音频、视频、超链接。 2.我们…

(五)FLUX中的数据类型

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 5 章 FLUX中的数据类型 5.1 10 个基本数据类型 5.1.1 Boolean (布尔型) 5.1.1.1 …

sql进阶 之case表达式

case表达式 CASE表达式是SQL里非常重要而且使用起来非常便利的技术,我们应该学会用它来描述条件分支。本节将通过行列转换、已有数据重分组(分类)、与约束的结合使用、针对聚合结果的条件分支等例题,来介绍CASE表达式的用法。标红…

JAVA设计模式——23种设计模式详解

一、什么是设计模式🍉 设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目…

MATLAB与ROS联合仿真——ROS环境搭建及相关准备工作(上)

本篇文章主要介绍在安装完ROS后,在进行MATLAB与ROS联合仿真之前,需要进行的一些环境搭建以及准备工作,主要分为 创建ROS工作空间及功能包、必备功能包安装、安装Gazebo11、导入实验功能包至工作空间、安装Visual_Studio_Code(选做)、常用便捷…

mac端数据库管理 Navicat Premium 15 for Mac v15.0.36

Navicat Premium 15是一款功能强大的数据库管理工具,由PremiumSoft CyberTech Ltd.开发。它提供了一个集成的界面,用于连接和管理多种不同类型的数据库,如MySQL、Oracle、SQL Server、PostgreSQL等。 Navicat Premium 15具有直观和用户友好的…

NFT和数字藏品的安全方案解析

一、NFT和数字藏品 01 NFT是什么? NFT 是Non-Fungible Tokens 的缩写,意思是不可互换的代币,它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。什么是可互换的代币?比如BTC(比特币)、ETH&…

SDN系统方法 | 5. 交换机操作系统

随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…

react native 本地存储 AsyncStorage

An asynchronous, unencrypted, persistent, key-value storage system for React Native. Async Storage 只能用来储存字符串数据,所以为了去储存object类型的数据,得先进行序列化(JSON.stringify())当你想要使用数据的时候&…

低代码:“提效降本”是如何炼成的

人们向往着从前车马慢的生活,可对于工厂而言,慢节奏如同噩梦。 目录 01、低代码的到来 02、让开发提效降本 03、结束语 在没有数字化以前的制造业,多个厂区之间的信息传递,例如采购单或者审批单,要用货车拉&#xff0c…

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02 day02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(Linux Virtual Server)NginxHAProxy KeepAlive…

iptables 防火墙

防火墙:隔离功能 部署在网络边缘或者主机边缘,在工作中,防火墙的主要作用,决定哪些数据可以被外网使用,以及哪些数据可以进入内网访问 主要工作在网络层 安全技术 1.入侵检测系统:检测出威胁&#xff0…

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

【业务功能篇50】ObjectMapper-将java对象转为json字符串

ObjectMapper可以实现Java对象和json字符串间互相转换,我们经常用到的是它的Java对象转json字符串功能。 这里目的是 Java对象 json字符串相互转换 api 【json字符串转为Java对象:readValue(json字符串,类.class)】【Java对象转为json字符串&#xff1a…

WPF实战学习笔记09-创建工作单元

创建工作单元 添加包 Microsoft.EntityFrameworkCore.AutoHistory A plugin for Microsoft.EntityFrameworkCore to support automatically recording data changes history. Microsoft.EntityFrameworkCore.UnitOfWork A plugin for Microsoft.EntityFrameworkCore to suppor…

Python实战项目——旅游数据分析(四)

由于有之前的项目,所以今天我们直接开始,不做需求分析,还不会需求分析的可以看我之前的文章。Python实战项目——用户消费行为数据分析(三) 导入库 import numpy as np import pandas as pd import matplotlib.pyplo…

Canal深入调研

Canal深入调研 1.canal的设计 1.1 Canal的设计理念 canal的组件化设计非常好,有点类似于tomcat的设计。使用组合设计,依赖倒置,面向接口的设计。 说明: ​ server代表一个canal运行实例,对应于一个jvm ​ instance…

elasticsearch操作(命令方式)

说明:elasticsearch是目前最流行的搜索引擎,功能强大,非常受欢迎。特点是倒排索引,在海量数据的模糊查找领域,效率非常高。elasticsearch的安装和使用参考:http://t.csdn.cn/yJdZb。 本文介绍在es的索引库…

ajax/axios访问后端测试方法

文章目录 1、浏览器执行javascript方法GET请求POST请求 2、Postman测试工具GET请求POST请求 3、idea IDE提供的httpclient4、Apache JMeter 1、浏览器执行javascript方法 GET请求 http://localhost:6060/admin/get/123 POST请求 技巧:打开谷歌浏览器&#xff0c…

隧道安全监测解决方案

隧道安全监测 解决方案 一、监测目的 通过监控量测,实现信息化施工,不仅能及时掌握隧道实际的地质情况,掌握隧道围岩、支护衬砌结构的受力特征和变形情况,据此可以尽早发现塌方、大变形等灾害征兆,及时采取措施&…