SkyWalking中Trace落地实现方案

2023-11-12

转载一篇对漱skywalking中traceid的实现方案

SkyWalking 中 Trace 的相关概念以及实现类与 OpenTracing 中的概念基本类似,像 Trace、Span、Tags、Logs 等核心概念,在 SkyWalking Agent 中都有对应实现,只是在细微实现上略有区别的,其中最重要的是: SkyWalking 的设计在 Trace 级别和 Span 级别之间加了一个 Segment 概念,用于表示一个服务实例内的 Span 集合。

Trace ID

在分布式链路追踪系统中,用户请求的处理过程会形成一条 Trace 。Trace ID 作为 Trace 数据的唯一标识,在面对海量请求的时候,需要保证其唯一性。与此同时,还要保证生成 Trace ID 不会带来过多开销,所以在业务场景中依赖数据库(自增键或是类似 Meituan-Dianping/Leaf 的 ID 生成方式)都不适合 Trace 的场景。
这种要求快速、高性能生成唯一 ID 的需求场景,一般会将 snowflake 算法与实际的场景集合进行改造

注:snowflake 算法是 Twitter 开源的分布式 ID 生成算法 。snowflake 算法的核心思想是将一个 ID(long类型)的 64 个 bit 进行切分,其中使用 41 个 bit 作为毫秒数,10 个 bit 作为机器的 ID( 5 个 bit 记录数据中心的 ID,5 个 bit 记录机器的 ID ),12 bit 作为毫秒内的自增 ID,还有一个 bit 位永远是 0。

算法优势:snowflake 算法的好处是 ID 可以直接靠算法在内存中产生,内存内的锁控制并发,不需依赖 MySQL 这样的外部依赖,无维护成本。缺点就是每个机器节点在每毫秒内只可以产生 4096 个 ID,超出这个范围就会溢出。另外,如果机器回拨了时间,就会生成重复的 ID

SkyWalking 中使用 DistributedTraceId 类来抽象 Trace ID,其中封装了一个 ID 类型的字段。DistributedTraceId 有两个实现类,如下图所示:

其中,NewDistirbutedTraceId 负责生成新 Trace ID,请求刚刚进入系统时,会创建 NewDistirbutedTraceId 对象,其构造方法内部会调用 GlobalIdGenerator.generate() 方法生成 ID 对象。

PropagatedTraceId 负责处理 Trace 传播过程中的 TraceId。PropagatedTraceId 的构造方法接收一个 String 类型参数(也就是在跨进程传播时序列化后的 Trace ID),解析之后得到 ID 对象。

在后面的介绍中还会涉及另一个与 Trace ID 相关的类 —— DistributedTraceIds,它表示多个 Trace ID 的集合,其底层封装了一个 LinkedList<DistributedTraceId> 集合,用于记录相关的 Trace ID。

TraceSegment

在 SkyWalking 中,TraceSegment 是一个介于 Trace 与 Span 之间的概念,它是一条 Trace 的一段,可以包含多个 Span。在微服务架构中,一个请求基本都会涉及跨进程(以及跨线程)的操作,例如, RPC 调用、通过 MQ 异步执行、HTTP 请求远端资源等,处理一个请求就需要涉及到多个服务的多个线程。TraceSegment 记录了一个请求在一个线程中的执行流程(即 Trace 信息)。将该请求关联的 TraceSegment 串联起来,就能得到该请求对应的完整 Trace。

Span

TraceSegment 是由多个 Span 构成的,AbstractSpan 抽象类是 SkyWalking 对 Span 概念的抽象,下图是 Span 的继承关系:

注:更深层次的了解,个人这边暂时还未去了解,只能暂时先了解这些。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SkyWalking中Trace落地实现方案 的相关文章

  • HTML详解连载(6)

    HTML详解连载 6 专栏链接 link http t csdn cn xF0H3 下面进行专栏介绍 开始喽 CSS特性 继承性 注意 层叠性 特点 优先级 规则 公式 注意 叠加计算 公式 每以及之间不存在进位 规则 Emmet写法分析
  • python开发效率怎样_python开发效率

    广告关闭 腾讯云11 11云上盛惠 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高返5000元 题主想要提高开发效率 下面这款人工智能工具 可以在不需要把ide玩的666的时候也能提高你自己开发软件的效率 机缘巧合最近开

随机推荐

  • 两个类是同一个类的判断标准

    两个类是同一个类的判断标准 1 完整的类名必须相同 包括包名 2 使用同一个类加载器加载 如果一个类是由用户自定义的加载器加载的 那么JVM会将这个类的类加载器的一个引用作为类型信息的一部分保存在方法区中 类的主动使用与被动使用 1日常的操
  • Nginx修复CORS漏洞方案(亲测可行)

    漏洞介绍 概述 CORS 跨域资源共享 Cross origin resource sharing 是H5提供的一种机制 WEB应用程序可以通过在HTTP增加字段来告诉浏览器 哪些不同来源的服务器是有权访问本站资源的 当不同域的请求发生时
  • 服务器的内核信息,服务器的内核怎么看

    服务器的内核怎么看 内容精选 换一换 业务接入DDoS高防后 经过高防转发的流量到服务端之后真实源IP将被隐藏 在业务应用开发中 通常需要获取客户端真实的IP地址 例如 投票系统为了防止刷票 需要通过获取客户端真实IP地址 限制每个客户端I
  • Docker小白到实战之Docker Compose在手,一键足矣

    前言 Docker可以将应用程序及环境很方便的以容器的形式启动 但当应用程序依赖的服务比较多 或是遇到一个大系统拆分的服务很多时 如果还一个一个的根据镜像启动容器 那就有点累人了 到这有很多小伙伴会说 弄个脚本就搞定啦 要的就是这个思路 D
  • 如何在 C# 中以编程方式将 IGS/IGES 文件转换为 PDF?

    计算机辅助设计应用程序使用 IGS 文件 因为它们包含设计信息 您可以将 IGS 文件转换为 PDF 格式的文档 以便在多个操作系统和环境中查看内容 使用 C 以编程方式将 IGS 或 IGES 文件转换为 PDF 使用高级选项将 IGES
  • 黑客零基础自学路线(超详细),学完即可进去“包吃包住”

    写在开头 此教程为纯技术分享 本文的目的决不是为那些怀有不良动机的人提供及技术支持 严禁利用本文所提到的漏洞和技术进行非法攻击 也不承担因为技术被滥用所产生的连带责任 网络绝非法外之地 开门见山 很多人上来就说想做黑客 但是连方向都没搞清楚
  • 【Linux】压缩和解压缩

    gzip gunzip压缩 只能压缩文件不能压缩目录 不保留原来的文件 gzip 文件 压缩文件 只能将文件压缩为 gz文件 gunzip 文件 gz 功能描述 解压缩文件命令 zip unzip压缩 zip zip twinkle zip
  • 取整和取余

    取整和取余 在数学的除法运算中 两个数相除是可以算到小数位的 但是 在c语言中两个整数相除其结果是一个整数 只有两数中至少有一个为实数的时候 他们相除的结果才是小数 因此 两个整数相除的结果就会涉及到取整问题 在c语言中 其取整方式为向0取
  • Gartner:“新基建”五大关键领域见解及建议

    关注ITValue 看企业级最新鲜 最具价值报道 图片来源 视觉中国 文章来源 Gartner 作者 Gartner公司副总裁及高管合伙人龚培元 Michael Kung 近日 中共中央政治局常务委员会召开会议 会议指出 要加大公共卫生服务
  • Java异常被抛出或被捕获之后,代码是否继续执行的问题 ...

    在写程序的时候 我们经常被教导 要对异常的信息进行处理 哪里该抛出异常 但是 更多的时候 我们只是模仿异常的抛出 却不知道为什么要这样抛异常 被catch了 被向上抛了 后面的代码是否执行了 接下来 我就简单的说一下异常抛出后的代码执行问题
  • 工作流任务调度系统:Apache DolphinScheduler

    官网 GitHub 目录 1 概述 1 1 背景 1 2 特点 2 系统架构 2 1 名词解释 2 2 架构 3 部署 3 1 后端部署 3 1 1 基础软件安装 3 1 2 创建部署用户 3 1 3 下载并解压 3 1 4 针对esche
  • Java在多线程下 对数据库的事务能不能控制,为什么?

    对数据库的事务不能直接在Java多线程下进行控制的主要原因是数据库连接和事务通常是基于线程的 在Java中 数据库连接是使用java sql Connection对象来表示的 通常情况下 每个线程都会拥有自己的数据库连接对象 这意味着每个线
  • openstack安装之计算服务安装配置笔记

    1 设置本地实验ip 1 1 管理节点和计算节点更改hosts 使用ifconfig查看本地ip地址 vi etc hosts x x x x controller x x x x compute1 1 2 管理节点编辑chrony con
  • Tomcat 自带的 JDBC 连接池官方文档中文版

    转载链接 https blog csdn net white ice article details 52610136https blog csdn net white ice article details 52610136 简介 JDB
  • 更:最近还在搞毕设

    最近两天有点颓 但是没有闲着 自己的毕设系统做了个五五六六了 是基于springboot和vue的 后续还得加个以太坊 进行上链 应该是可以应付中期答辩的程度 但是还是得完善 话说昨天因为写文件上传下载调不通 就哭了 泪流满面 太菜了 会继
  • 正则表达式简单小结

    d 匹配一个数字 w 匹配一个字母 数字或者下划线 s 匹配一个空格 tab 匹配任意字符 u 匹配指定unicode字符 D 匹配一个非数字 W 匹配一个非字母 非数字且非下划线 S 匹配一个非空格 匹配任意个字符 匹配至少一个 匹配0或
  • VScode使用gitlab

    本机安装Git客户端 配置git 首次使用git提交代码 需要先配置user name 和 user email 打开cmd 输入如下命令 Git 全局设置 git config global user name yourName 注意 和
  • vue el-dialog 弹窗实现拖拽效果

    文章目录 前言 一 如何在 elementUI el dialog 对话框添加拖拽操作 1 首先我们将新建一个js文件 dialog js 放在项目的对应位置 将下面代码复制到文件中 2 其次我们要在 main js 文件中引入该 js 文
  • openGauss学习笔记-14 openGauss 简单数据管理-查看对象

    文章目录 openGauss学习笔记 14 openGauss 简单数据管理 查看对象 14 1 查看命令帮助信息 14 2 切换数据库 14 3 查询所有数据库 14 4 查询当前数据库中的所有表 14 5 查看表结构 openGauss
  • SkyWalking中Trace落地实现方案

    转载一篇对漱skywalking中traceid的实现方案 SkyWalking 中 Trace 的相关概念以及实现类与 OpenTracing 中的概念基本类似 像 Trace Span Tags Logs 等核心概念 在 SkyWalk