开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

Uber 正式开源其分布式跟踪系统 Jaeger

  • 2017-11-08
  • 本文字数:1721 字

    阅读完需:约 6 分钟

Uber 在 GitHub 正式开源了分布式跟踪系统Jaeger ,其灵感来源于 Dapper OpenZipkin ,从 2016 年开始,该系统已经在 Uber 内部得到了广泛的应用,它可以用于微服务架构应用的监控,特性包括分布式上下文传播(Distributed context propagation)、分布式事务监控、根原因分析、服务依赖分析以及性能 / 延迟优化。该项目已经被云原生计算基金会(Cloud Native Computing Foundation,CNCF)接纳为第12 个项目

Uber 分布式跟踪技术的演化

Uber 的分布式跟踪系统是随着业务的演化而不断发展的,在由单体架构迁移至微服务时,传统的监视工具,例如度量值和分布式日志依然能够发挥作用,但这类工具往往无法提供跨越不同服务的可见性。因此,就有必要引入分布式跟踪的工具。

最初,Uber 所使用的跟踪工具叫做 Merckx。Merckx 架构使用了拉取模式,可从 Kafka 的指令数据中拉取数据流,其不足之处在于主要面向单体式 API 的时代,缺乏分布式上下文传播的概念。随后,Uber 开发了 TChannel ,这是一种适用于 RPC 的网络多路复用和框架协议。很多新构建的服务都使用了 TChannel,但是承担核心业务的大部分服务都没有使用 Tchannel。这些服务主要是通过四大编程语言(Node.js、Python、Go 和 Java)实现的,在进程间通信方面使用了多种不同的框架。这种异构的技术环境使得 Uber 在分布式追踪系统的构建方面会面临比谷歌和 Twitter 更严峻的挑战。

因此,Uber 专门组建了分布式跟踪团队,团队目标就是将现有的 Tchannel 原型系统转换为一种可以全局运用的生产系统,让分布式追踪功能可以适用并适应 Uber 的微服务。该团队集思广益,创建了 Jaeger 项目。
关于 Uber 分布式跟踪技术的演进过程,在 InfoQ 之前的文章中曾经有过相关报道

Jaeger 项目简介

术语

Jaeger 兼容 OpenTracing 的数据模型和 instrumentation 库,能够为每个服务 / 端点使用一致的采样方式。在 Jaeger 中,使用了该规范所定义的术语。

  • Span:代表了系统中的一个逻辑工作单元,它具有操作名、操作开始时间以及持续时长。Span 可能会有嵌套或排序,从而对因果关系建模。一个 RPC 调用的 Span 如下图所示。

  • Trace:代表了系统中的一个数据 / 执行路径,可以理解成 Span 的有向无环图。

组件

Jaeger 的各组件关系如下图所示:

Jaeger 客户端库

Jaeger 客户端库是 OpenTracing API 的特定语言实现。它们可以对要进行分布式跟踪的应用进行 instrument 操作,这些应用可以手动实现,也可以使用各种已有的开源的框架,比如 Flask、Dropwizard、gRPC 等。

经过 instrument 操作的服务在接收到新请求的时候,就会创建 Span 并关联上下文信息(trace id、span id 和 baggage)。只有 id 和 baggage 会随请求进行传播,而组成 Span 的其他信息,比如操作名称、日志等,并不会随之传播。采样得到的 Span 会在后台异步传递到进程外边,发送到 Jaeger Agent 上。

需要注意的是,所有的 Trace 都会生成,但是只有其中的一小部分会被采样。默认情况下,Jaeger 会采样 0.1% 的 Trace。

Agent

Agent 是一个网络守护进程,监听通过 UDP 发送过来的 Span,它会将其批量发送给 collector。按照设计,Agent 要被部署到所有主机上,作为基础设施。Agent 将 collector 和客户端之间的路由与发现机制抽象了出来。

Collector

Collector 从 Jaeger Agent 接收 Trace,并通过一个处理管道对其进行处理。目前的管道会校验 Trace、建立索引、执行转换并最终进行存储。存储是一个可插入的组件,现在支持 Cassandra。

Query

Query 服务会从存储中检索 Trace 并通过 UI 界面进行展现,该 UI 界面通过 React 技术实现,其页面 UI 如下图所示,展现了一条 Trace 的详细信息。

按照其官网的介绍,未来计划加入的功能包括自适应采样(Adaptive Sampling)提供更多种语言的客户端库、延迟矩阵图、动态配置、基于Apache Flink 构建数据管道,以支持Trace 聚集和数据挖掘,除此之外,Jaeger 0.70 版本已支持服务到服务的依赖图,未来还会支持基于路径的依赖图,能够展现出某项服务的所有上下流依赖,而不仅仅是临近的服务。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-11-08 18:004743

评论

发布
暂无评论
发现更多内容

专访惠众科技|元宇宙应用如何借助3DCAT实时云渲染实现流畅大并发呈现?

3DCAT实时渲染

元宇宙 实时渲染云

2023-05-10:给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表 如果在二叉树中,存在一条一直向下的路径 且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,

福大大架构师每日一题

Go 算法 rust 福大大

总有AI想害'朕' 失业,我们该何去何从| 社区征文

穿过生命散发芬芳

ChatGPT 三周年征文

类似Redmine,但更好的7款项目管理工具

爱吃小舅的鱼

项目管理 项目管理软件 Redmine

浅谈如何做好知乎内容营销:需要注意哪些细节

石头IT视角

腾讯云和ScaleFlux联合推出可计算存储与大容量QLC NAND解决方案

ScaleFlux

腾讯云 数据中心 降本增效 企业级SSD SSD寿命

云原生应用交付流程安全规范

穿过生命散发芬芳

安全规范 三周年连更

麻了,一个操作把MySQL主从复制整崩了

JAVA旭阳

Java MySQL

澳鹏与 Reka AI 强强联合,构建高质量的多模态 LLM 应用

澳鹏Appen

人工智能 数据标注 生成式AI

可计算存储是否真的与众不同?

ScaleFlux

压缩数据 计算与存储 固态硬盘

AI都会写脚本了,传统的运维工程师会失业吗? | 社区征文

wljslmz

AI 运维工程师 三周年征文

在SDN技术盛行的时代,网络工程师需要不断学习新技术跟上时代的步伐 | 社区征文

wljslmz

sdn 三周年征文

来了!昇腾MindStudio全流程工具链分论坛精彩回顾,助力高效开发和迁移效率提升

Geek_2d6073

[杂谈]大型JSON数据切分(Java Jackson)

alexgaoyh

json elasticsearch Jackson 分割

Python自动化办公神器!1行代码实现文件转PDF,支持Word、Excel、PPT、TXT格式

程序员晚枫

Python PDF

AntDB数据库体验室上线啦!一站式培训+实操,带您感受“电信级”国产数据库的魅力

亚信AntDB数据库

AntDB AntDB数据库 企业号 5 月 PK 榜

Redis Operator在中原银行实践落地及能力创新

中原银行

redis 云原生 operator redis operator

用LeangooScrum敏捷工具做缺陷管理和迭代规划和迭代执行

顿顿顿

Scrum 敏捷开发 敏捷项目管理 敏捷工具 scrum敏捷工具

HTTPS 的加密过程及其工作原理

wljslmz

https 三周年连更

C++模板和泛型编程详解

小万哥

c++ 程序员 面试 后端 开发

软件测试丨Pytest-运行用例、常用参数、执行pytest、异常处理

测试人

软件测试 自动化测试 测试开发 pytest

从IDC数据库安全报告,看OceanBase安全能力

OceanBase 数据库

数据库 oceanbase

盘古云课堂加入 PolarDB 开源数据库社区

阿里云数据库开源

polarDB PolarDB-X PolarDB-PG PolarDB for PostgreSQL 阿里云瑶池数据库

挑战与机遇,全面预算管理的执行计划

智达方通

2023 开源之夏|和 Milvus & Towhee 一起玩转 AI、享开源、得奖金

Zilliz

Milvus Zilliz 向量数据库 Towhee 开源之下

Flink中的时间及窗口类型

阿泽🧸

flink 三周年连更

通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ

亚马逊云科技 (Amazon Web Services)

大数据如何助力营销(1)市场调研

MobTech袤博科技

理解并实现自动导入(Auto Import)功能的原理

Lee Chen

JavaScript

体验MMGPT本地部署(上)

IT蜗壳-Tango

三周年连更

中国网约车领域月度观察2023年04月

易观分析

网约车 出行服务

Uber正式开源其分布式跟踪系统Jaeger_语言 & 开发_张卫滨_InfoQ精选文章