分布式链路追踪理论

基本概念

分布式调用链标准-openTracing

Span-节点组成跟踪树结构

有一些特定的变量,SpanName SpanId traceId spanParentId

Trace(追踪):代表一个完整的请求流程(如用户下单),由多个Span组成

Span(跨度):请求经过的单个服务或操作(如订单服务调用支付服务)

包含:开始/结束时间、服务名、调用关系等

Context(上下文):传递Trace ID、Span ID等,确保链路连续

分布式链路追踪 = Trace ID串联全局 + Span记录局部 + 上下文传递


Span节点必须包含的内容

OperationName:操作名称

BeiginTime:开始时间

EndTime:结束时间

SpanTag:是一组键值对构成的Span的标签集合(key必须是String类型,value可以是String,Boolean和数字类型),这个的目的是为Span添加更多的描述信息

SpanLog:一组Span的日志集合,是键值对,记录日志信息

SpanContext:是一个上下文对象,会从上一个节点传递到下一个节点,里面包含了traceIdSpanIdBaggage(这是一个跨Span集合,上一个节点往Baggage加信息下一个节点可以拿到,不要放太多信息不然会导致占用空间大影响效率),我们通过上下文对象去进行跨进程传递


TraceSegment和TraceId原理

TraceSegment:

  1. 指的是一个进程中所有的Span的集合
  2. 如果多个线程协同产生同一个Trace(例如多个RPC调用不同的方法),它们只会共同创建一个TraceSegment
  3. 支持多入口,所以Skywalking去除了树节点RootSpan的概念,提出了三种Span模型

TraceId:

  1. TraceId应该是全局唯一的
  2. 我们的TraceId是根据时间错+算法生成的,所以会有时间回拨问题
  3. 我们有个变量lastTimeStamp保存上次TraceId生成的时间,然后在生成TraceId前进行比较,如果CuurentTimeMills比lastTimeStamp时间小,说明时间回拨了,我们就不生成Id,这样来保证TraceId全局唯一

概念简单总结

三个基本概念:Trace追踪,Span服务,Context上下文(用来传递信息)

分布式链路追踪 = Trace ID串联全局 + Span记录局部 + 上下文传递

Span中包含starTime,endTime,SpanContetx(上下文用来传递信息,包含TraceId,SpanId),

SpanTag(服务的标签),SpanLog(服务的日志信息)

TraceSegment(追踪段):一个进程中所有的Span的集合

TraceId:全局唯一,依赖时间戳,保存上次TraceId生成的时间,生成ID时时间戳进行对比,防止时间回拨问题


全链路追踪的工作流

阶段1:链路数据生成(埋点)

自动埋点:通过SDK或Agent自动在服务框架(如Spring Cloud、Dubbo)中注入追踪逻辑。

手动埋点:在业务代码中手动标记关键操作(如支付流程)。

示例:用户下单时,网关生成Trace ID=ABC,创建根Span(Span ID=1)


阶段2:链路数据采集与传输

采集方式:通过Agent或Sidecar(如Envoy)实时收集Span数据

传输协议:通过gRPC、HTTP等将数据发送到Collector(如Jaeger Collector)。

示例:订单服务(Span ID=2)和库存服务(Span ID=3)的Span通过Kafka发送到收集器。


阶段3:链路数据存储

存储后端:使用时序数据库(如InfluxDB)、列式存储(如Cassandra)或Elasticsearch。

数据模型:按Trace ID聚合Span,建立索引(如服务名、耗时、错误码)。

示例:Trace ID=ABC的所有Span被存储为一条完整链路。


阶段4:数据查询与分析

可视化通过UI工具(如Zipkin、SkyWalking)展示火焰图、调用拓扑。

分析能力:支持按服务名、耗时、错误码过滤,自动统计P99延迟、错误率。

示例:发现库存服务(Span ID=3)平均耗时500ms,触发告警


流程简单总结
  1. 链路数据生成:在进入Span服务前生成数据,一般来说再进入服务器会有自定义数据处理or服务启动前的Agent增强让服务有了多余的自定义逻辑
  2. 实时采集与传输链路数据:通过Http或者grpc采集和传输链路追踪的数据
  3. 链路数据存储:存储链路追踪的数据
  4. 数据查询与分析可视化:通过可视化页面展示详细的链路追踪流程和数据,显示服务细节,耗时,错误等

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

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

相关文章

err: Error: Request failed with status code 400

好的,今天学习ai的时候从前端发送请求,实在是想不通为啥会啥是一个坏请求,后来从前端方法一个一个找参数,传递的值都有,然后想到我这边需要传递的是一个对象,那么后端使用的RequestParam就接收不到json对象…

开发小程序后端用PHP好还是Java哪个好?

在开发后端时,是选择PHP还是Java主要取决于你的项目需求、团队技术栈、性能要求以及维护成本等因素。下面我将从几个关键方面对两者进行简要对比,以帮助你做出更明智的选择。 PHP 优点: 简单易学:PHP语法简单,上手快&a…

麒麟V10 aarch64 qt 安装

在麒麟V10(aarch64架构)中安装Qt,需根据具体需求选择合适的方法。以下是综合多个搜索结果的安装方案及注意事项: 一、安装方法 1. 在线安装默认版本 适用于对Qt版本无特殊要求的情况。通过APT包管理器安装系统默认提供的Qt版本(如Qt 5.12.12): sudo apt-get update s…

pdf.js移动端预览PDF文件时,支持双指缩放

在viewer.html中添加手势缩放代码 <script>// alert("Hello World");let agent navigator.userAgent.toLowerCase();// if (!agent.includes("iphone")) {let pinchZoomEnabled false;function enablePinchZoom(pdfViewer) {let startX 0, start…

算法笔记.kruskal算法求最小生成树

题目&#xff1a;&#xff08;来源&#xff1a;AcWing&#xff09; 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 求最小生成树的树边权重之和&#xff0c;如果最小生成树不存在则输出 impossible。 给定一张边带权的无向…

C#开发的自定义Panel滚动分页控件 - 开源研究系列文章

前些时候因为想拥有一个自己的软件快捷打开软件&#xff0c;于是参考Windows 11的开始菜单&#xff0c;进行了编写这个应用软件&#xff0c;里面有一个功能就是对显示的Panel里的应用对象的分页功能&#xff0c;于是就想写一个对Panel的自定义滚动条控件。 下面开始介绍此控件的…

【基础篇】prometheus命令行参数详解

文章目录 本篇内容讲解命令行参数详解 本篇内容讲解 prometheus高频修改命令行参数详解 命令行参数详解 在页面的/页面上能看到所有的命令行参数&#xff0c;如图所示&#xff1a; 使用shell命令查看 # ./prometheus --help usage: prometheus [<flags>]The Promethe…

深入理解CSS3:Flex/Grid布局、动画与媒体查询实战指南

引言 在现代Web开发中&#xff0c;CSS3已经成为构建响应式、美观且高性能网站的核心技术。它不仅提供了更强大的布局系统&#xff08;Flexbox和Grid&#xff09;&#xff0c;还引入了令人惊艳的动画效果和精准的媒体查询能力。本文将深入探讨这些关键技术&#xff0c;帮助您提…

从线性到非线性:简单聊聊神经网络的常见三大激活函数

大家好&#xff0c;我是沛哥儿&#xff0c;我们今天一起来学习下神经网络的三个常用的激活函数。 引言&#xff1a;什么是激活函数 激活函数是神经网络中非常重要的组成部分&#xff0c;它引入了非线性因素&#xff0c;使得神经网络能够学习和表示复杂的函数关系。 在神经网络…

2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门

4月25日&#xff0c;在2025上海国际汽车工业展览会期间&#xff0c;全球领先的物联网和车联网整体解决方案供应商移远通信宣布&#xff0c;其全新AR脚踢毫米波雷达RD7702AC正式发布。 该产品专为汽车尾门“无接触交互”设计&#xff0c;基于先进的毫米波技术&#xff0c;融合AR…

深度学习:迁移学习

迁移学习 标题1.什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发 的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过 从已学习的相关任务中转移知识来改进学习的新任务&#xff0c;虽然大多数…

Rabbitmq下载和安装(Windows系统,百度网盘)

一.下载安装Erlang 1.百度云下载 链接&#xff1a;https://pan.baidu.com/s/1k_U25KKngEf1iXWD1ANOeg 提取码&#xff1a;8ilc 2.安装 傻瓜式安装 直接下一步 选择自己要安装的路径 3.配置环境变量 增加变量名为&#xff1a;ERLANG_HOME 变量值填写自己的安装路径&#x…

(一)Linux的历史与环境搭建

【知识预告】 Linux背景介绍Linux操作系统特性Linux的应用场景Linux的发行版本搭建Linux环境 1 Linux背景介绍 1.1 什么是Linux&#xff1f; Linux是一种自由、开源的操作系统。严格来说&#xff0c;它是基于类Unix设计思想&#xff0c;旨在为用户提供稳定、安全、高效的计…

光流法:从传统方法到深度学习方法

1 光流法简介 光流&#xff08;Optical Flow&#xff09;是指图像中像素灰度值随时间的变化而产生的运动场。 简单来说&#xff0c;它描述了图像中每个像素点的运动速度和方向。 光流法是一种通过分析图像序列中像素灰度值来计算光流的方法。对于图像数据计算出来的光流是一个二…

解决ssh拉取服务器数据,要多次输入密码的问题

问题在于&#xff0c;每次循环调用 rsync 都是新开一个连接&#xff0c;所以每次都需要输入一次密码。为了只输入一次密码&#xff0c;有以下几种方式可以解决&#xff1a; ✅ 推荐方案&#xff1a;设置 SSH 免密登录 最稳最安全的方式是&#xff1a;配置 SSH 免密登录&#x…

web技术与Nginx网站服务

目录 一. web基础 1. 域名概念 2. Hosts 文件 3. DNS 4. 域名注册 5. 网页与 HTML 二. 网页概述 1. HTML 概述 2. HTML 基本标签 3. 网站和主页 三. 静态网页与动态网页 1. 静态网页 2. 动态网页 3. 动态网页语言 四. HTTP 协议 1. HTTP 协议概述 2. HTTP …

信创系统资产清单采集脚本:主机名+IP+MAC 一键生成 CSV

原文链接&#xff1a;信创系统资产清单采集脚本&#xff1a;主机名IPMAC 一键生成 CSV Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在信创终端操作系统上自动批量采集主机名、IP 和 MAC 并导出为 CSV 表格的实战文章&#xff01;本方案使用 sshpass 和 Bash 脚本…

【dify+docker安装教程】

目录 一、dify安装包下载 二、运行环境配置 1、下载docker 2、安装 2.1 新建文件夹 2.2 安装 2.3 命令安装 3.下载完成后需要重启电脑&#xff0c;注意保存文档&#xff01;&#xff01;注意保存&#xff01;&#xff01;注意&#xff01;&#xff01;&#xff08;血的教…

HTML 地理定位(Geolocation)教程

HTML 地理定位(Geolocation)教程 简介 HTML5 的 Geolocation API 允许网页应用获取用户的地理位置信息。这个功能可用于提供基于位置的服务&#xff0c;如导航、本地搜索、天气预报等。本教程将详细介绍如何在网页中实现地理定位功能。 工作原理 浏览器可以通过多种方式确定…

协作开发攻略:Git全面使用指南 — 引言

协作开发攻略&#xff1a;Git全面使用指南 — 引言 Git 是一种分布式版本控制系统&#xff0c;用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本&#xff0c;支持多人协作开发&#xff0c;方便代码合并与冲突解决&#xff0c;广泛应用于软件开发领域。 文中内容仅限技…