前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >链路追踪(Tracing)的前世今生(上)

链路追踪(Tracing)的前世今生(上)

原创
作者头像
Duncan_
发布于 2021-11-04 09:54:44
发布于 2021-11-04 09:54:44
1.7K0
举报

点击一键订阅《云荐大咖》专栏,获取官方推荐精品内容,学技术不迷路!

带着疑问看历史

提起链路追踪,大部分人都会想起 Zipkin、Jaeger、Skywalking 这些已经比较成熟的链路追踪开源软件以及 Opentelemetry、OpenTracing、OpenCensus 这些开源标准。虽然实现各有差异,但是使用各种软件、标准和实现组合搭建出来的不同的链路追踪系统,却有着许多相类似的地方

例如这些链路追踪系统都需要在调用链路上传播元数据。他们对元数据内容的定义也大同小异,链路唯一的 trace id, 关联父链路的 parent id,标识自身的 span id 这些。他们都是异步分散上报采集的追踪信息,离线的聚合聚合追踪链路。他们都有链路采样等等。

链路追踪系统架构和模型的设计看着都是如此相似,我不禁会产生一些疑问:开发者在设计链路追踪的时候,想法都是这么一致吗?为什么要在调用链路传递元数据?元数据的这些信息都是必要的吗?不侵入修改代码可以接入到链路追踪系统吗?为什么要异步分散上报,离线聚合?设置链路采样有什么用?

带着各种各样的问题,我找到这些众多链路追踪软件的灵感之源 -- 《Google Dapper》 论文,并且拜读了原文以及相关的引用论文。这些论文逐渐解开了我心中的疑惑。

黑盒模式探索

早期学术界对分布式系统链路状态检测的探索,有一派的人们认为分布式系统里面的每个应用或者中间件,应该是一个个黑盒子,链路检测不应该侵入到应用系统里面。那个时候 Spring 还没被开发出来,控制反转和切面编程的技术也还不是很流行,如果需要侵入到应用代码里面,需要涉及到修改应用代码,对于工程师来说额外接入门槛太高,这样的链路检测工具就会很难推广开来。

如果不允许侵入应用里面修改代码,那就只能够从应用的外部做手脚,获取并记录链路信息了。而由于黑盒的限制,链路信息都是零散的无法串联起来。如何把这些链路串联起来成了需要解决的问题。

《Performance Debugging for Distributed Systems of Black Boxes》

这篇论文发表于 2003 年,是对黑盒模式下的调用链监测的探索,文中提出了两种寻找链路信息的算法

第一种算法称为“嵌套算法”,首先是通过生成唯一 id 的方式,把一次跨服务调用的请求 (1 call)链路与返回(11 return)链路关联再一起形成链路对。然后再利用时间的先后顺序,把不同往返链路对做平级关联或上下级关联(参考图1)。

图1
图1

如果应用是单线程情况,这种算法但是没有什么问题。生产的应用往往是多线程的,所以使用这种方法无法很好的找到链路间对应关系。虽然论文提出了一种记分板惩罚的方法可以对一些错误关联的链路关系进行除权重,但是这种方法对于一些基于异步 RPC 调用的服务,却会出现一些问题。

另外一种算法称为“卷积算法”,把往返链路当成独立的链路,然后把每个独立链路对当成一个时间信号,使用信号处理技术,找到信号之间的关联关系。这种算法好处是能够出使用在基于异步 RPC 调用的服务上。但是如果实际的调用链路存在回环的情况,卷积算法除了能够得出实际的调用链路,还会得出其他调用链路。例如调用链路 A -> B -> C -> B -> A,卷积算法除了得出其本身调用链路,还会得出 A -> B -> A 的调用链路。如果某个节点在一个链路上出现次数多次,那么这个算法很可能会得出大量衍生的调用链路。

在黑盒模式下,链路之间的关系是通过概率统计的方式判断链路之间的关联关系。概率统计始终是概率,没办法精确得出链路之间的关联关系。

另一种思路

怎么样才能够精确地得出调用链路之间的关系呢?下面这篇论文就给出了一些思路与实践。

Pinpoint: Problem Determination in Large, Dynamic Internet Services

注:此 Pinpoint 非 github 上的 pinpoint-apm

这篇论文的研究对象主要是拥有不同组件的单体应用,当然相应的方法也可以扩展到分布式集群中。在论文中 Pinpoint 架构设计主要分为三部分。参考 图2,其中 Tracing 与 Trace Log 为第一部分,称为客户端请求链路追踪(Client Request Trace),主要用于收集链路日志。Internal F/D 、External F/D 和 Fault Log 为第二部分,是故障探测信息(Failure Detection),主要用于收集故障日志。Statistical Analysis 为第三部分,称为数据聚类分析(Data Clustering Analysis),主要用于分析收集进来的日志数据,得出故障检测结果。

图2
图2

Pinpoint 架构中,设计了一种能够有效用于数据挖掘分析方法的数据。如 图3 所示,每个调用链路作为一个样本数据,使用唯一的标识 request id 标记,样本的属性记录了这个调用链路所经过的程序组件(Component)以及故障状态(Failure)。

图3
图3

为了能够把每次调用的链路日志 (Trace Logs) 和 故障日志 (Fault Logs) 都关联起来,论文就以 Java 应用为例子,描述了如何在代码中实现这些日志的关联。下面是 Pinpoint 实践章节的一些关键点汇总

  1. 需要为每一个组件生成一个 component id
  2. 对于每一个 http 请求生成一个唯一的 request id,并且通过线程局部变量(ThreadLocal)传递下去
  3. 对于请求内新起来的线程,需要修改线程创建类,把 request id 继续传递下去
  4. 对于请求内产生的 rpc 调用,需要修改请求端代码,把 request id 信息带入 header,并在接收端解析这个 header 注入到线程本地变量
  5. 每次调用到一个组件(component),就使用 (request id, component id) 组合记录一个 Trace Log

对 java 应用而言,这几个点技术实践简单,操作性高,为现今链路追踪系统实现链路串联,链路传播(Propegation)提供了基本思路。

这篇论文发表时间是 2002 年,那个时候 java 版本是 1.4,已经具备了线程本地变量(ThreadLocal)的能力,在线程中携带信息是比较容易做到的。但又因为在那个时代切面编程还不是很普及(Spring 出现在 2003年,javaagent 是在 java 1.5 才有的能力,发布于2004年),所以这样的方法并不能够被广泛应用。如果反过来想,可能正是因为这些编程需求的出现,促使着 java 切面编程领域的技术进步

重新构建调用链路

X-Trace: A Pervasive Network Tracing Framework

这篇论文主要研究对象是分布式集群里面的网络链路。X-Trace 论文延续并扩展了 Pinpoint 论文的思路,提了能够重新构建完整调用链路的框架和模型。为了达到目的,文中定义了三个设计原则

  1. 在调用链路内携带元数据(在调用链路传递的数据也称之为带内数据,in-bound data
  2. 上报的链路信息不留存在调用链路内,收集链路信息的机制需要与应用本身正交(注:不在调用链路里面留存的链路数据,也称之为带外数据,out-of-bound data
  3. 注入元数据的实体应该与收集报告的实体解偶

原则 1,2 点是沿用至今的设计原则。原则 1 则是对 Poinpont 思路的扩展,链路传递从原来的request id 扩展了更多的元素,其中 TaskID , ParentID , OpID 就是 trace id , parent id, span id 的前身。span 这个单词也在 X-Trace 论文的 Abstract 里面出现,也许是 Dapper 作者向 X-Trace 论文作者们的一种致敬。

下面再看看 X-Trace 对元数据的内容定义

  1. Flags
    • 一个bit数组,用于标记 TreeInfoDestinationOptions 是否使用
  2. TaskID
    • 全局唯一的id,用于标识唯一的调用链
  3. TreeInfo
    • ParentID - 父节点id,调用链内唯一
    • OpID - 当前操作id,调用链内唯一
    • EdgeType - NEXT 表示兄弟关系,DOWN 表示父子关系
  4. Destination
    • 用于指定上报地址
  5. Options
    • 预留字段,用于扩展

除了对元数据的定义,论文还定义了两个链路传播的操作,分别是 pushDown()pushNext()pushDown()表示拷贝元数据到下一层级,pushNext() 则表示从当前节点传播元数据到下一个节点。

图4 pushDown() 与 pushNext() 的伪代码
图4 pushDown() 与 pushNext() 的伪代码
图5 pushDown() 与 pushNext() 操作在调用链路中的执行的位置
图5 pushDown() 与 pushNext() 操作在调用链路中的执行的位置

在 X-Trace 上报链路数据的结构设计中,遵循了第 2 个设计原则。如 图6 所示, X-Trace 为应用提供了一个轻量的客户端包,使得应用端可以转发链路数据到一个本地的守护进程。而本地的守护进程则是开放一个 UDP 协议端口,接收客户端包发过来的数据,并放入到一个队列里面。队列的另外一边则根据链路数据的具体具体配置信息,发送到对应的地方去,也许是一个数据库,也许是一个数据转发服务、数据收集服务或者是数据聚合服务。

图6
图6

X-Trace 上报链路数据的架构设计,对现在市面上的链路追踪实现有着不小的影响。对照 Zipkin 的 collector 以及 Jeager 的 jaeger-agent,多少能够看到 X-Trace 的影子。

X-Trace 的三个设计原则、带内带外数据的定义、元数据传播操作定义、链路数据上报架构等,都是现今链路追踪系统有所借鉴的内容。对照 Zipkin 的 collector 以及 Jeager 的 jaeger-agent,就多少能够看到 X-Trace 链路数据上报架构的影子。

大规模商用实践 -- Dapper

Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

Dapper 是谷歌内部用于给开发者们提供复杂分布式系统行为信息的系统。Dapper 论文则是介绍谷歌对这个分布式链路追踪基础设施设计和实践的经验。Dapper 论文发布于2010年,根据论文的表述,Dapper 系统已经在谷歌内部有两年的实践经验了。

Dapper 系统的主要目的是给开发者提供提供复杂分布式系统行为信息。文中分析为了实现这样的系统,需要解决什么样的问题。并根据这些问题提出了两个基本的设计需求:大范围部署和持续性的监控。针对着两个基本设计要求,提出了三个具体的设计目标:

  1. 低开销(Low overhead):链路追踪系统需要保证对在线服务的的性能影响做到忽略不计的程度。即使是很小的监控消耗也会对一些高度优化过的服务有可觉察的影响,甚至迫使部署团队关闭追踪系统。
  2. 应用级透明化(Application-level transparecy):开发者不应该感知到链路追踪设施。如果链路追踪系统需要依赖应用级开发者协助才能够工作,那么这个链路追踪设施会变得非常最弱,而且经常会因为 bugs 或者疏忽导致无法正常工作。这违反了大范围部署的设计需求。
  3. 可伸缩性(Scalability):链路追踪系统需要能够满足 Google 未来几年的服务和集群的规模。

虽然 Dapper 的设计概念与 Pinpoint、 Magpie、 X-Trace 有许多是想通的,但是 Dapper 也有自己的一些独到的设计。其中一点就是为了达到低开销的设计目标,Dapper 对请求链路进行了采样收集。根据 Dapper 在谷歌的实践经验,对于许多常用的场景,即使对 1/1000 的请求进行采样收集,也能够得到足够的信息。

另外一个独到的特点是他们实现非常高的应用透明度。这个得益于 Google 应用集群部署有比较高的同质化,他们可以把链路追踪设施实现代码限制在软件的底层而不需要在应用里面添加而外的注解信息。举个例子,集群内应用如果使用相同的 http 库、消息通知库、线程池工厂和 RPC 库,那么就可以把链路追踪设施限制在这些代码模块里面。

如何定义链路信息的?

文中首先举了一个简单的调用链例子,如 图7 ,作者认为对一个请求做分布式追踪需要收集消息的识别码以及消息对应的事件与时间。如果只考虑 RPC 的情况,调用链路可以理解为是 RPCs 嵌套树。当然,谷歌内部的数据模型也不局限于 RPCs 调用。

图7
图7

图8 阐述了 Dapper 追踪树的结构,树的节点为基本单元,称之为 span。边线为父子 span 之间的连接。一个 span 就是简单带有起止时间戳、RPC 耗时或者应用相关的注解信息。为了重新构建 Dapper 追踪树,span 还需要包含以下信息:

  1. span name: 易于阅读的名字,如图8中的 Frontend.Request
  2. span id: 一个64bit的唯一标识符
  3. parent id: 父 span id
图8
图8

图9 是一个 RPC span 的详细信息。值得一提的是,一个相同的 span 可能包含多个主机的信息。实际上,每一个 RPC span 都包含了客户端和服务端处理的注释。由于客户端的时间戳和服务端的时间戳来自不同的主机,所以需要异常关注这些时间的异常情况。图9 是一个 span 的详细信息

图9
图9

如何实现应用级透明的?

Dapper 通过对一些通用包添加测量点,对应用开发者在零干扰的情况下实现了分布式链路追踪,主要有以下实践:

  1. 当一个线程在处理链路追踪路径上时,Dapper 会把追踪上下文关联到线程本地存储。追踪上下文是一个小巧且容易复制的 span 信息容易。
  2. 如果计算过程是延迟的或者一步的,大多谷歌开发者会使用通用控制流库来构造回调函数,并使用线程池线程池或者其他执行器来调度。这样 Dapper 就可以保证所有的回调函数会在创建的时候存储追踪上下文,在回调函数被执行的时候追踪上下文关联到正确线程里面。
  3. Google 几乎所有的线程内通信都是建立在一个 RPC 框架构建的,包括 C++ 和 Java 的实现。框架添加上了测量,用于定义所有 RPC 调用相关 span。在被跟踪的 RPC,span 和 trace 的 id 会从客户端传递到服务端。在 Google 这个是非常必要的测量点。

结尾

Dapper 论文给出了易于阅读和有助于问题定位的数据模型设计、应用级透明的测量实践以及低开销的设计方案,为链路追踪在工业级应用的使用清除了不少障碍,也激发了不少开发者的灵感。自从 Google Dapper 论文出来之后,不少开发者受到论文的启发,开发出了各式各样的链路追踪,2012 年推特开源 Zipkin、Naver 开源 Pinpoint,2015 年吴晟开源 Skywalking,Uber 开源 Jaeger 等。从此链路追踪进入了百家争鸣的时代

一键订阅专栏,学技术不迷路

《云荐大咖》是腾讯云加社区精品内容专栏。云荐官特邀行业佼者,聚焦于前沿技术的落地及理论实践之上,持续为您解读云时代热点技术、探索行业发展新机。点击一键订阅,我们将为你定期推送精品内容。

p.s.云荐官将随机抽取部分订阅小伙伴,送出腾讯行业大会、见面会门票、云加视频礼盒、腾讯公仔!

大咖常驻栏目,为您答疑解惑

有疑问?有感悟?想探讨?期望老师推出什么作品?欢迎在本文评论区提问、交流,老师将为您解答。

云荐官将抽取1位小伙伴送出云加视频礼盒一份!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于opentracing + jaeger 实现全链路追踪
当代互联网服务,通常都是用复杂,大规模分布式集群来实现,微服务化,这些软件模块分布在不同的机器,不同的数据中心,由不同团队,语言开发而成。因此,需要工具帮助理解,分析这些系统、定位问题,做到追踪每一个请求的完整调用链路,收集性能数据,反馈到服务治理中,链路追踪系统应运而生。
orientlu
2019/06/14
3K0
牛逼哄哄的全链路监控系统!搭建起来也没有想象中的那么难啊...
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
用户8639654
2021/08/23
1.1K0
可视化全链路日志追踪
总第523篇 2022年 第040篇 可观测性作为系统高可用的重要保障,已经成为系统建设中不可或缺的一环。然而随着业务逻辑的日益复杂,传统的ELK方案在日志搜集、筛选和分析等方面愈加耗时耗力,而分布式会话跟踪方案虽然基于追踪能力完善了日志的串联,但更聚焦于调用链路,也难以直接应用于高效的业务追踪。 本文介绍了可视化全链路日志追踪的新方案,它以业务链路为载体,通过有效组织业务每次执行的日志,实现了执行现场的可视化还原,支持问题的高效定位。 1. 背景 1.1 业务系统日益复杂 1.2 业务追踪面临挑战 2.
美团技术团队
2022/07/26
1.8K0
可视化全链路日志追踪
实现全链路监控平台很难吗?Pinpoint、SkyWalking、Zipkin 选型对比
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
java进阶架构师
2021/05/08
1.7K0
实现全链路监控平台很难吗?Pinpoint、SkyWalking、Zipkin 选型对比
各大厂分布式链路跟踪系统架构对比
    随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络,那现在
欢醉
2018/05/28
7.4K0
分布式链路追踪-Dapper论文简述
在现在的微服务系统中,客户端的一次操作往往需要经过多个模块、多个中间件、多台机器的相互协作才能完成。在这一系列的请求中,可能是串行也可能是并行,那么如何确定客户端的一次操作背后调用了哪些应用、哪些模块,经过了哪些节点,每个模块的调用先后顺序是怎样的,每个模块的性能问题如何?随着业务系统模型的日趋复杂化,分布式系统中急需一套链路追踪(Trace)系统来解决这些痛点。 分布式服务跟踪是整个分布式系统中跟踪一个用户请求的过程,包括数据采集、数据传输、数据存储、数据分析和数据可视化,捕获此类跟踪让我们构建用户交互背后的整个调用链的视图,这是调试和监控微服务的关键工具。
日薪月亿
2019/05/14
2.7K0
分布式链路追踪-Dapper论文简述
快速了解分布式链路追踪系统 zipkin
和市面上其它分布式链路追踪系统一样,Zipkin 也是根据 Google 论文《Dapper,大规模分布式系统的跟踪系统》(https://bigbully.github.io/Dapper-translation/) 作为理论,进行设计。
高楼Zee
2021/10/14
1.4K0
快速了解分布式链路追踪系统 zipkin
天机阁——全链路跟踪系统设计与实现
小时光茶社 传说中天机阁里有一台掌控世间一切的机器,万物运行由此产生。本文的“天机阁”是一个基于链路跟踪的监控系统,后台开发人员能够通过“天机阁”洞察“天机”,快速解决问题。 摘要 为了支撑日益增长的庞大业务量,业界大量使用微服务架构。服务按照不同的维度进行拆分,互联网应用构建在不同的软件模块集上,这些软件模块可能是由不同的团队开发、可能使用不同的编程语言来实现、可能布在了几千台服务器,横跨多个不同的数据中心,分布式系统变得日趋复杂。 如何快速进行故障定位?如何准确进行容量评估?如何动态展示服务的链路?如
小时光
2019/06/26
7.4K1
天机阁——全链路跟踪系统设计与实现
几款符合 OpenTracing 规范的分布式链路追踪组件介绍与选型
Tracing 是在上世纪 90 年代就已出现的技术,但真正让该领域流行起来的还是源于 Google 的一篇 Dapper 论文。分布式追踪系统发展很快,种类繁多,但无论哪种组件,其核心步骤一般有 3 步:代码埋点、数据存储和查询展示,如下图所示为链路追踪组件的组成。
aoho求索
2021/01/28
9.4K1
几款符合 OpenTracing 规范的分布式链路追踪组件介绍与选型
架构师——复盘落地全链路监控项目
记一次完整的落地全链路监控项目的完整过程,我们来一起复盘下,我是如何进行技术选型的。
35岁程序员那些事
2022/09/23
1.4K0
架构师——复盘落地全链路监控项目
得物云原生全链路追踪Trace2.0-采集篇
2020年3月,得物技术团队在三个月的时间内完成了整个交易体系的重构,交付了五彩石项目,业务系统也进入了微服务时代。系统服务拆分之后,虽然每个服务都会有不同的团队各司其职,但服务之间的依赖也变得复杂,对服务治理等相关的基础建设要求也更高。
得物技术
2022/12/08
1.3K0
得物云原生全链路追踪Trace2.0-采集篇
如何利用链路追踪快速定位问题
“呃。。。对这个接口的请求日志好难找啊,这个接口请求很频繁,不知道报错的是哪一条。。”
ThoughtWorks
2023/09/18
3730
如何利用链路追踪快速定位问题
一文搞懂全链路监控:方案概述与比较!
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
互扯程序
2019/09/10
11.2K0
一文搞懂全链路监控:方案概述与比较!
Skywalking 链路追踪
APM(Application Performance Monitoring)即应用性能管理系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进行检测、优化、提高企业应用的可靠性和质量,保证用户得到良好的服务,降低 IT拥有的成本。APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题**。**
Java架构师必看
2021/04/25
2.4K0
Skywalking 链路追踪
一个完整的分布式追踪系统是什么样子的
现代分布式链路追踪公认的起源,是 Google 在 2010 年发表的论文《Dapper : a Large-Scale Distributed Systems Tracing Infrastructure》,这篇论文介绍了 Google 从 2004 年开始使用的分布式追踪系统 Dapper 的实现原理。
燃192
2023/04/11
3930
一个完整的分布式追踪系统是什么样子的
基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger
最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学。下面我将从原理到demo为大家一一进行讲解,欢迎评论区交流~。
白泽z
2022/08/18
9300
基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger
分布式系统架构6:链路追踪
在复杂的分布式系统中,系统通常由多个独立的服务组成,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路。
卷福同学
2025/01/01
1350
分布式系统架构6:链路追踪
SpringCloud详细教程 | 第九篇:服务链路追踪(Spring Cloud Sleuth)(Greenwich版本)
微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。
小东啊
2019/06/26
4.7K0
SpringCloud详细教程 | 第九篇:服务链路追踪(Spring Cloud Sleuth)(Greenwich版本)
几种分布式调用链监控组件的实践与比较(一)实践
引言:最近在调研与选型分布式调用链监控组件。选了主要的三种APM组件进行了实践与比较。本来打算一篇文章写完的,篇幅太长,所以分了两篇。本文主要讲下链路traceing的基本概念和几种APM组件的实践,实践部分也没给出特别详细的步骤,因为本文重点不在具体的步骤。第二篇将会讲下几种APM选型的比较与性能测试。 1. 问题背景 微服务架构下,服务按照不同的维度进行拆分,一次请求请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可
aoho求索
2018/04/03
1.7K0
几种分布式调用链监控组件的实践与比较(一)实践
APM 原理与框架选型
随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂:
JadePeng
2018/09/27
3.6K0
APM 原理与框架选型
推荐阅读
相关推荐
基于opentracing + jaeger 实现全链路追踪
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档