链路追踪详解(三):分布式链路追踪标准的演进

news2025/1/21 15:36:36

目录

Google Dapper

Twitter Zipkin

Uber Jaeger

OpenTracing 和 OpenCensus

OpenTelemetry

小结


分布式链路追踪是现代云计算和微服务架构中一个关键技术,可以让开发者和运维团队理解和监控服务请求在复杂系统中的完整流转路径。分布式链路追踪技术的发展经历了从早期的专有解决方案到现代的开源和标准化的过程,本文讲解一下分布式链路追踪标准的演进过程。

Google Dapper

Google 于 2010 年发布的题为《Dapper,a Large-Scale Distributed Systems Tracing Infrastructure》的论文,是分布式链路追踪的一个重要里程碑。这篇论文详细描述了 Google 内部使用的分布式追踪系统的设计和实现方法。Dapper 的目标是提供低开销、应用级的链路追踪系统,能够收集请求在分布式系统的流转数据。该系统的设计和实现方式为后来的分布式追踪技术奠定了基础。

Dapper 的核心概念包括:

  • Span:表示一个操作或函数调用的时间跨度。
  • Trace:由多个 span 组成,代表一个请求的完整生命周期。
  • Sampling:为了降低数据收集的开销,Dapper 采用了抽样技术,只追踪一部分请求。

Twitter Zipkin

受到 Dapper 的启发,Twitter 开发了自己的分布式追踪系统 Zipkin。Zipkin 是第一个被广泛采用的开源的分布式链路追踪系统,提供了数据收集、存储和查询的功能,以及友好的 ui 界面来展示追踪信息。

Zipkin 的架构包括:

  • Collector:负责接收各服务发送的追踪数据。
  • Storage:追踪数据的存储系统,可以是 SQL 数据库、Cassandra 或 Elasticsearch。
  • API:提供数据查询的接口。
  • Web UI:用于展示追踪信息的系统。

Zipkin 的开源特性使其在社区中迅速流行,许多公司开始使用并贡献代码。

Uber Jaeger

Uber 在内部面临与 Twitter 类似的问题,于是开发了自己的链路追踪系统 Jaeger。Jaeger 在设计上受到了 Dapper 和 Zipkin 的启发,并引入了一些新的特性和概念,比如:

  • 自适应采样:可以动态调整采样率,以在性能和数据质量之间取得平衡。
  • 高级查询功能:提供了更加强大和灵活的查询能力。
  • 端到端追踪:跟踪请求从开始到结束的完整路径。

Jaeger 后来也被开源,并且成为云原生计算基金会(CNCF)的托管项目。Jaeger 的加入进一步加强了分布式链路追踪技术在云原生生态系统中的地位,并得到了更广泛的社区支持。成为了该领域的重要项目。

OpenTracing 和 OpenCensus

随着分布式链路追踪技术的日益流行,有一个问题也日益突出:不同的链路追踪系统和工具之间缺乏兼容性,如果使用了一个链路追踪系统,就很难切换到另一个了。为了解决这个问题,产生了两个重要的项目:OpenTracing 和 OpenCensus。

OpenTracing 旨在提供一套统一的、厂商无关的链路追踪 API 和规范,定义了一套标准的接口,允许开发者在不同的链路追踪系统之间切换而无需修改代码。OpenTracing 的目标是成为链路追踪数据的中间层,让链路追踪工具的选择成为运行时决策而不是设计时决策。OpenTracing 包括了 API 规范、实现该规范的框架和库以及项目文档。

OpenCensus 是由 Google 发起的项目,与 OpenTracing 类似的是都支持 Trace。但相比 OpenTracing 增加了更多的功能,包括新增了对 Metrics 的支持,不仅制定了规范还实现了 Agent 和 Collector。

虽然 OpenTracing 和 OpenCensus 有着相似的目标,但它们在实现方式和社区支持上存在差异,这也导致了一定程度的分裂。

OpenTelemetry

为了解决 OpenTracing 和 OpenCensus 之间的分歧并统一标准,两个项目合并成为了 OpenTelemetry 项目。OpenTelemetry 旨在建立一个全面的可观测性工具集,包括了 Metrics、Tracing、Logs 和日志收集功能。OpenTelemetry 与厂商、平台无关,不提供后端服务。用户可根据自己的需求将数据导出到不同后端,例如 Prometheus、Zipkin、Jaeger 和各云厂商的可观测服务。

OpenTelemetry的关键特性包括:

  • 统一的 API 和 SDK:定义了 Metrics、Tracing、Logs 几种类型的标准,并提供了相关的适配了各种语言的 SDK
  • 多语言支持:支持多种编程语言和框架。
  • 可插拔架构:可以轻松地将数据导出到不同的后端分析工具。

OpenTelemetry 的目标是成为分布式链路追踪和监控的事实标准,通过提供一个全面的解决方案,试图适应不断发展的分布式系统的需求。

小结

从 Dapper 到 OpenTelemetry,分布式链路追踪技术经经历了从专有到开源,再到标准化的过程。这一过程反映了行业对于系统可观测性的不断追求,OpenTelemetry 作为分布式链路追踪的事实标准,代表了这个领域未来的技术方向。

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

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

相关文章

岚图追光PHEV 25.28万元起售,开卷混动豪华轿车

作者|Amy 编辑|德新 12月5日晚,2023岚图科技日上,岚图汽车正式发布了其新一代SOA电子电气架构天元架构,并宣布了以“新行政电动旗舰”为定位的岚图追光PHEV正式上市。 岚图追光PHEV是岚图汽车旗下首款电混轿车&#x…

【LeetCode刷题】-- 79.单词搜索

79.单词搜索 方法:使用回溯 使用dfs函数表示判断以网格的(i.j)位置出发,能否搜索到word(k),其中word(k)表示字符串word从第k个字符开始的后缀子串,如果能搜索到,返回true,反之返回false 如果board[i][j]≠word[k]&am…

【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)

目录 1 什么是“实时驱动RTD(Real-Time Driver)” 2 安装“实时驱动RTD(Real-Time Driver)” 2.1 方法一:通过S32DS Extensions and Updates安装“实时驱动RTD(Real-Time Driver)” 2.2 方法二:通过Install New Software…安装“实时驱动RTD(Real-Ti…

什么是LIMS实验室信息管理系统 LIMS系统功能介绍

实验室信息管理系统,也称为 LIMS系统,是一种软件解决方案,它通过自动化手动流程来支持现代实验室操作。因此,生命科学专业人员可以实时访问准确无误的信息。该软件使用户能够更有效地管理样本、分析相关数据并根据相关数据采取行动…

高端角雷达参考设计(TI文档)

说明 该参考设计使用了 AWR2944 评估模块 (EVM),为角雷达应用满足 NCAP R79 安全要求奠定了基础。该设计使用户能够估算和跟踪器件视场内最远 200m 的物体位置(在方位平面中)和速度。该应用主要面向提供多种功能(如盲点检测、前侧…

《Java 并发编程艺术》笔记(上)

如何减少上下文切换 减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。 无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁。如将数据的 ID 按照 Hash 算法…

用modelbox server启动流程图,暴露Restful接口

背景 假设你已经搭建了modelbox开发容器,能够使用webUI构建流程图。如果没有请参考昇腾npu上构建modelbox webUI开发容器教程。 现在,本文会说明,如何在终端用命令的方式将流程图暴露为服务,并能够在本地用postman访问。 本文参…

「智慧城市」这一概念科学吗?还是炒作?

智慧城市是一个综合性的概念,它利用信息技术和创新概念,将城市的各个系统和服务集成起来,以提升城市运行效率、优化城市管理和服务,改善市民的生活质量。 具体来说,智慧城市涵盖了许多领域,包括城市规划、建…

Python中读写CSV文件的深入探讨

目录 一、引言 二、如何读取CSV文件 三、如何写入CSV文件 四、处理大型CSV文件 五、总结 一、引言 CSV(Comma-Separated Values)文件是一种常见的逗号分隔值格式的文件,常用于存储和传输数据。在Python中,我们可以使用内置的…

WindowsServer服务器系列:定时备份 MySQL

一、编写脚本 echo 取日期、时间变量值 set yy%date:~0,4% set mm%date:~5,2% set dd%date:~8,2% if /i %time:~0,2% lss 10 set hh0%time:~1,1% if /i %time:~0,2% geq 10 set hh%time:~0,2% set mn%time:~3,2% set ss%time:~6,2% set date%yy%%mm%%dd% set time%hh%%mn%%ss…

GIT GUI使用

文章目录 一、新建本地仓库二、推送(push) 一、新建本地仓库 在空白处右键,找到GIT GUI here, 如果没有仓库,出现的是这样的: 如果有仓库,在本地仓库里打开就是这样的: 新建本地…

外包干了6个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

C语言面试之旅:掌握基础,探索深度(面试实战之单片机——IO)

梦想和自由一样,都有代价,但都值得。 ----小新 引言 单片机是一种微控制器,它包含一个处理器、存储器、定时器和I/O端口等。I/O端口是单片机与外部设备进行通信的接口。通过I/O端口,外部设备可以输入和输出数据到单片机中。 在单…

【数据结构】——二叉树特点

前言:我们前面已经了解了二叉树的一些概念,那么我们今天就来了解下二叉树的遍历实现和一些性质。 二叉树的遍历方式有三种:前序,中序,后序。 前序:先根节点,再左子树,最后右子树。 中…

SpringSecurity工作原理(一)

实现功能就是继承这几个对应功能的类。 大概工作流程 Spring Security 的过滤器(Filters)和拦截器(Interceptors)是 Spring Security 框架中用于保护 web 应用安全的重要组件。它们在处理 HTTP 请求时扮演不同的角色&#xff0c…

Linux自启服务提示:systemd[1]: *.service: main process exited, code=exited, status=1问题

这两天一直在沉迷于配脚本,由于服务器很多,所以我都是从一台服务器上配置好的脚本直接copy到另一台服务器,按说完全一样的脚本一样的操作,那么应该是一样的执行结果 but, Gul’dan,代…我重启服务器后服务并没有正常启…

k8s官方镜像代理加速

背景 大家可能在云原生领域需要部署周边的一些生态组件时,在国内遇到无法正常拉取镜像,显得就有点苦恼,不过没关系,常见的${{ registry_name }} 例如 “gcr.io”,“registry.k8s.io” Failed to pull image “registry…

【c】杨辉三角

下面介绍两种方法 1.利用上面性质的第五条&#xff0c;我们可以求各行各列的组合数 2.利用上面性质的第7条&#xff0c;我们可以用数组完成 下面附上代码 1. #include<stdio.h> void fact(int n ,int m )//求组合数 {long long int sum11;long long int sum21;int a…

AI Pika 生成进击的巨人动漫分镜案例

背景介绍 Pika 是一个使用 AI 生成和编辑视频的平台。它致力于通过 AI 技术使视频制作变得简单和无障碍。 Pika 1.0 是 Pika 的一个重大产品升级&#xff0c;包含了一个新的 AI 模型,可以在各种风格下生成和编辑视频,如 3D 动画&#xff0c;动漫&#xff0c;卡通和电影风格。…

跳水比赛(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…