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

目录

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.mzph.cn/news/203316.shtml

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

相关文章

C/C++,数值计算——快速幂(Quick Pow)的几种算法源代码

1 文本格式 // C Version long long binpow(long long a, long long b) { if (b 0) return 1; long long res binpow(a, b / 2); if (b % 2) return res * res * a; else return res * res; } // C Version long long binpow(long long a,…

10.Java程序设计-基于SSM框架的微信小程序家教信息管理系统的设计与实现

摘要是论文的开篇,用于简要概述研究的目的、方法、主要结果和结论。以下是一个简化的摘要示例,你可以根据实际情况进行修改和扩展: 摘要 随着社会的发展和教育需求的增长,家教服务作为一种个性化的学习方式受到了广泛关注。为了更…

nodejs微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

短视频购物系统源码:构建创新购物体验的技术深度解析

短视频购物系统作为电商领域的新宠,其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计,以揭示其如何构建创新购物体验的技术奥秘。 1. 技术架构与框架选择 短视频购物系统的源码首先考虑的是其技术架构。常见的选择…

近期复习三

目录 nginx.conf文件介绍 一.文件共享功能 1.清空html目录下文件并新建你要共享的文件 2.修改nginx.conf文件,开启autoindex功能 3.测试 二.状态模块 1.修改nginx.conf文件 2.测试 (1)使用刚才定义的IP/nginx_status进行访问 &#…

TypeScript中的单件设计模式

基本概念 (1) 了解设计模式 设计模式通俗的讲,就是一种更好的编写代码方案,打个比喻:从上海到武汉,你可以选择做飞机,做轮船,开车,骑摩托车多种方式,把出行…

Caché/M 数据库系统 InterSystems IRIS 的 Windows 安装

针对 InterSystems IRIS 数据库的一些基本概念。 InterSystems IRIS 是什么 InterSystems IRIS 是基于 Cach/M 语言开发的一个数据库,这个数据库被大量使用在医疗系统中,也是北美地区医疗系统病历和文件管理中默认使用的事实标准。 Cach/M 是什么 Ca…

德迅猎鹰(云蜜罐)有什么用

蜜罐(Honeypot)是一种安全技术,用于吸引和欺骗攻击者,以便收集关于攻击行为的信息和情报。它模拟了一个脆弱的系统、服务或网络资源,看起来对攻击者具有吸引力,但实际上是为了引诱攻击者暴露其攻击手法和意…

Django 开发 web 后端,好用过 SpringBoot ?

基础语法 Django(Python):以简洁和直观著称。它允许更快的开发速度,特别适合快速迭代的项目。例如,一个简单的视图函数: from django.http import HttpResponsedef hello_world(request):return HttpRespon…

Sprite Editor图片编辑器的使用_unity基础开发教程

Sprite Editor图片编辑器的使用 什么是Sprite Editor安装插件(3D项目)切片方式Automatic:自动切片Grid By Cell Size:按照像素大小进行切片Grid By Cell Count:按照个数进行切片Isometric Grid:等距网格切片…

电脑版便签软件怎么设置在桌面上显示?

对于不少上班族来说,如果想要在使用电脑办公的时候,随手记录一些常用的工作资料、工作注意事项等内容,直接在电脑上使用便签软件记录是比较方便的。电脑桌面便签工具不仅方便我们随时记录各类工作事项,而且支持我们快速便捷使用这…

使用Go快速开发TCP公共服务

使用Go快速开发TCP公共服务 文章目录 使用Go快速开发TCP公共服务一、前言二、实现思路三、源码四、测试使用五、最后 一、前言 之前使用的公共TCP服务无法使用了,想了一下整个实现原理不是很复杂,就利用Go快速开发了一个,利用公网服务器可以…

KD-Tree

游戏中常对物体进行空间划分,对于均匀分布的划分一般用四叉树(八叉树),动态不均匀的分布可以采用kd-tree 构建kd-tree 构建思路: 1.对节点进行各维度的方差分析,选取方差最大(即离散程度最高)的维度进行排序。取中值节点作为分…

多平台展示预约的服装小程序效果如何

线下实体服装店非常多,主要以同城生意为主,但随着电商经济增长,传统线下自然流量变少,商家们会选择线上入驻平台开店获得更多线上用户,包括自建私域小程序等。 而除了直接卖货外,线上展示预约在服装行业也…

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式

我这边是因为业务需要将之前导出的word文档转换为PDF文件,然后页面预览下载这样的情况。之前导出word文档又不是我做的,所以为了不影响业务,只是将最后在输出流时转换成了PDF,当时本地调用没什么问题,一切正常&#xf…

HarmonyOS(十一)——初识状态管理

前言 在前文的描述中,我们构建的页面多为静态界面。如果希望构建一个动态的、有交互的界面,就需要引入“状态”的概念。 假设我们要实现如下一个动态的交互界面: 上面的示例中,用户与应用程序的交互触发了文本状态变更&#x…

SQL server 根据已有数据库创建相同的数据库

文章目录 用导出的脚本创建相同的数据库导出建表脚本再次建表 一些sql语句 用导出的脚本创建相同的数据库 导出建表脚本 首先,右击要导出的数据库名,依次选择任务-生成脚本。 简介(第一页)处选择下一步,然后来到选择…

uniapp 打包H5页面时候清除手机缓存问题

最近遇到一个情况: uniapp 写了一个H5 页面,挂在一个小程序上面,但是每次更新代码,新增新功能,总是有的用户看到的还是上一个版本的样式,前端打包的时候,已经在Uniapp项目的根目录下面新建了一个…

Python替代Adobe从PDF提取数据

大家好,PDF文件是官方报告、发票和数据表的通用格式,然而从PDF文件中提取表格数据是一项挑战。尽管Adobe Acrobat等工具提供了解决方案,但它们并不总是易于获取或可自动化运行,而Python则是编程语言中的瑞士军刀。本文将探讨如何利…

使用 MITRE ATTCK® 框架缓解网络安全威胁

什么是MITRE ATT&CK框架 MITRE Adversarial Tactics, Techniques, and Common Knowledge(ATT&CK)是一个威胁建模框架,用于对攻击者用来入侵企业、云和工业控制系统(ICS)并发起网络攻击…