1、简介

1.1 Jaeger是什么

Jaeger  是受到 ​ ​Dapper​​​ 和 ​ ​OpenZipkin​​​ 启发的由 ​ ​Uber Technologies​​ 作为开源发布的分布式跟踪系统,截止2023年8月3日最新稳定版本是1.47。其前端采用React语言实现,后端采用GO语言实现,适用于进行链路追踪,分布式跟踪消息传递,分布式事务监控、问题分析、服务依赖性分析、性能优化等场景。

1.2 分布式链路追踪相关术语

(1)APM

随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂:

  • 不同的服务可能由不同的团队开发、甚至可能使用不同的编程语言来实现;
  • 服务有可能布在了几千台服务器,横跨多个不同的数据中心。

因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是APM系统,全称是(Application Performance Monitor,当然也有叫 Application Performance Management tools)

AMP最早是谷歌公开的论文提到的 Google Dapper。Dapper是Google生产环境下的分布式跟踪系统,自从Dapper发展成为一流的监控系统之后,给google的开发者和运维团队帮了大忙,所以谷歌公开论文分享了Dapper。

(2)链路追踪

在传统的单体程序中,遇到问题时,我们可以通过函数间的调用栈来查看函数间的调用关系。但是在分布式的架构中,一个请求可能会导致多个不同网络的服务调用,这给我们调试问题带来了困难。Jaeger可以简单理解为微服务的函数调用栈,其记录了一个请求的各种调用关系,以便于我们分析问题。

  • tracer:在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。trace 是多个 span组成的一个有向无环图(DAG),每一个span代表trace中被命名并计时的连续性的执行片段。每一个 Trace 会有一个独有的 Trace ID,假设服务调用关系为 a->b->c->d,请求从 a 开始发起。 那么 a 负责生成 traceId,并在调用 b 的时候把 traceId 传递给 b,以此类推,traceId 会从 a 层层传递到 d。
  • span: 是链路追踪工具的逻辑工作单元,可以是一个微服务中的 service,也可以是一次方法调用,甚至一个简单的代码块调用。具有请求名称、请求开始时间、请求持续时间。每一个 Span 会有一个独有的 Span ID。Span 会被嵌套并排序以展示服务间的关系。
  • Span Context:含额外 Trace 信息的数据结构,span context 可以包含 Trace ID、Span ID,以及其他任何需要向下游服务传递的 Trace 信息。

总而言之,Trace表示对一次请求完整调用链的跟踪,而将两个服务例如上面的服务A和服务B的请求/响应过程叫做一次Span,trace是通过span来体现的, 通过一句话总结,我们可以将一次trace,看成是span的有向图,而这个有向图的边即为span。而分布式跟踪系统要做的,就是记录每次发送和接受动作的标识符和时间戳,将一次请求涉及到的所有服务串联起来,只有这样才能搞清楚一次请求的完整调用链。

(3)OpenTracing

为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。

一句话总结,OpenTracing是一套标准,它通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。OpenTracing提供了用于运营支撑系统的和针对特定平台的辅助程序库。程序库的具体信息请参考详细的规范。OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准。

注意 1:OpenTracing现在已经成为过去式了,现在的APM(全称:Application Performance Management tools,应用程序性能管理工具)世界,由一种叫做OpenTelemetry的规范所统治,具体详情参见《OpenTelemetry概述》。

1.3 Jaeger和其他常用分布式链路追踪工具对比

市面上关于分布式链路追踪工具的产品很多,除了 Uber 的 Jaeger 和 Twitter 的 Zipkin,目前 SkyWalking 使用者也比较多,下面从多个维度对比下常用分布式链路追踪工具的能力。

2、Jaeger架构设计

2.1 Jaeger架构

  • Tracing SDK:  用于实现分布式链路追踪的软件开发工具包。这些 SDK 通常是针对特定编程语言或框架的,旨在帮助开发人员在应用程序中集成分布式追踪功能。这些 SDK 提供了一组 API 和工具,使开发人员能够在应用程序代码中插入相关的追踪代码,从而捕获应用程序的请求路径、性能指标和其他有关信息。通过在代码中插入追踪代码,应用程序的不同组件和服务之间的交互将被追踪,从而形成完整的请求链路。
  • JaegerCollector: 接收traces,通过处理管道运行它们进行validation和清理/丰富,并将其存储在存储后端。Jaeger内置了对多个存储后端的支持,以及用于实现自定义存储插件的可扩展插件框架。
  • DB: Jaeger Collector 拿到的数据存储的地方,可以选 ES 或者 Cassandra等。
  • Jaeger UI: 是一项公开了从存储中检索traces的API的服务,并托管了一个用于搜索和分析traces的Web UI。

在Jaeger架构设计中,Jaeger Collector组件从被跟踪的应用程序接收数据,并将其直接写入存储。 存储必须能够同时处理平均流量和峰值流量。Jaeger Collector使用内存队列来平滑短期流量峰值,但如果存储无法跟上,持续的流量峰值可能会导致数据丢失。

注意 1:这是Jaeger最新稳定版本1.47的架构图,我们在比较老的jaeger版本的架构图中经常会看到jaeger-agent组件,其在应用程序和后端收集器之间起到中间代理的作用,但是由于Jaeger 客户端库已被弃用,并且 OpenTelemetry SDK 正在逐步取消对 Jaeger Thrift 格式的支持,因此现在版本不再需要或推荐使用jaeger-agent 。

2.2 Jaeger采样率

分布式追踪系统本身也会造成一定的性能低损耗,如果完整记录每次请求,对于生产环境可能会有极大的性能损耗,一般需要进行采样设置。

当前支持四种采样率设置:

  • 固定采样(sampler.type=const)sampler.param=1 全采样, sampler.param=0 不采样;

  • 按百分比采样(sampler.type=probabilistic)sampler.param=0.1 则随机采十分之一的样本;

  • 采样速度限制(sampler.type=ratelimiting)sampler.param=2.0 每秒采样两个traces;

  • 动态获取采样率 (sampler.type=remote) ,允许根据特定条件动态地决定是否采集某个请求的追踪数据,以减少性能开销并确保系统的稳定性。

参考:APM 原理与框架选型

参考:Jaeger分布式跟踪工具初探

简述分布式链路追踪工具——Jaeger的更多相关文章

  1. 基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger

    微信搜索公众号 「程序员白泽」,进入白泽的编程知识分享星球 最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学.下面我将从原理到demo为大家一一进行讲解,欢迎评论 ...

  2. Go微服务框架go-kratos实战05:分布式链路追踪 OpenTelemetry 使用

    一.分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www. ...

  3. 一文详解|Go 分布式链路追踪实现原理

    在分布式.微服务架构下,应用一个请求往往贯穿多个分布式服务,这给应用的故障排查.性能优化带来新的挑战.分布式链路追踪作为解决分布式应用可观测问题的重要技术,愈发成为分布式应用不可缺少的基础设施.本文将 ...

  4. 解读Go分布式链路追踪实现原理

    摘要:本文将详细介绍分布式链路的核心概念.架构原理和相关开源标准协议,并分享我们在实现无侵入 Go 采集 Sdk 方面的一些实践. 本文分享自华为云社区<一文详解|Go 分布式链路追踪实现原理& ...

  5. 分布式链路追踪体验-skywalking入门使用

    背景 旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉.然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了.或者公司内部有链路追踪系统,虽然可以很轻松地通过 ...

  6. 个推基于 Zipkin 的分布式链路追踪实践

    作者:个推应用平台基础架构高级研发工程师 阿飞   01业务背景   随着微服务架构的流行,系统变得越来越复杂,单体的系统被拆成很多个模块,各个模块通过轻量级的通信协议进行通讯,相互协作,共同实现系统 ...

  7. .NET Core 中的日志与分布式链路追踪

    目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...

  8. 分布式链路追踪系统Sleuth和ZipKin

    1.微服务下的链路追踪讲解和重要性 简介:讲解什么是分布式链路追踪系统,及使用好处 进行日志埋点,各微服务追踪. 2.SpringCloud的链路追踪组件Sleuth 1.官方文档 http://cl ...

  9. 分布式链路追踪之Spring Cloud Sleuth+Zipkin最全教程!

    大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第九篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...

  10. 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

    一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...

随机推荐

  1. Redis分布式锁实现及使用

    文章目录 分布式锁 全局ID生成器 一人一单实现 超卖问题 一人一单 分布式锁 Redis setnx实现分布式锁 Redis在业内解决秒杀等业务场景有非常广的应用,如何设计实现一个分布式锁是解决超卖 ...

  2. java优先队列PriorityQueue

    文章目录 前言 PriorityQueue 优先队列 java中优先队列的声明 按优先级排序 常见方法 private void grow(int minCapacity) public boolea ...

  3. 【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1.0, 这是什么情况!

    问题描述 使用 Azure AD 注册应用 Oauth2 v2.0的终结点(OAuth 2.0 token endpoint (v2):https://login.partner.microsofto ...

  4. dede网站flash中图片不能正常显示解决办法

    专业微信开发 网站制作  就在西安格创网络  联系电话:18009249661  原因:因为服务器或虚拟主机用了CDN加速,导致图片是调用远程缓存,只能显示FLASH控件,但图片不能正常显示,常见于西 ...

  5. 2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度,如果不存在,返回 0

    2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在 ...

  6. 2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是

    2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是 ...

  7. 2020-03-01:给定一个非负数组arr,代表直方图。返回直方图的最大长方形面积。

    2020-03-01:给定一个非负数组arr,代表直方图.返回直方图的最大长方形面积. 福哥答案2020-03-01: 单调栈,大压小.有代码. 代码用golang编写,代码如下: package m ...

  8. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

    问题描述 新建表或者修改表varchar字段长度的时候,出现这个错误 Row size too large. The maximum row size for the used table type, ...

  9. OpenAI 官宣首个 ChatGPT iOS 应用

    最近,OpenAI 宣布推出官方 iOS 应用,允许用户随时随地访问其高人气 AI 聊天机器人,此举也打破了近几个月内苹果 App Store 上充斥似是而非的山寨服务的窘境. 该应用程序是 Chat ...

  10. Cesium中监听MOUSE_MOVE事件获取经纬度和高度

    有时候在这个圆球上获取精确的经度纬度还不容易,特别是高度 还好在cesium提供了接口,看 let selft = this; const scene = this.viewer.scene; var ...