分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

这篇具有很好参考价值的文章主要介绍了分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要解决的问题

  1. 如何记录请求经过多个分布式服务的信息,以便分析问题所在?
  2. 如何保证这些信息得到完整的追踪?
  3. 如何尽可能不影响服务性能?

追踪

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,distributed,哲学与架构,分布式

当用户请求到达前端A,将会发送rpc请求给中间层B、C;B可以立刻作出反应,但是C需要后端服务D、E的配合才能应答

一个简单有用的请求追踪应该包含发送、接收消息的消息标识符、时间戳。为了关联给定发起者的这些记录,在此有黑盒和基于标注的监控模式

  • 黑盒:假定并没有除了以上记录之外的额外信息,使用统计回归进行推断关联性。

    更加轻量化,但是需要更多数据以保证准确性

  • 基于标注:基于应用或者中间件去显式采用全局标识符标注这些记录,从而关联。

    需要代码侵入,但可以将之植入到通用组件中

追踪信息

  • span: 链路追踪的基本单元,以追踪树结构串联起来。
  • trace id: 对于每一个请求链路上的span都有唯一的trace id

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,distributed,哲学与架构,分布式
分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,distributed,哲学与架构,分布式

度量点

  • 当一个线程处理追踪控制路径时,dapper附加追踪上下文到本地线程储存中
  • 当异步处理时,dapper保证异步回调将会储存追踪上下文到创建者,并且当回调调用时将会关联到适当的线程
  • 植入到rpc通信中

采样收集

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,distributed,哲学与架构,分布式

  1. 写入span数据到本地log文件
  2. dapper拉取各主机数据
  3. 最终写入到dapper bigtable

bigtable中每个trace置于表行,每个span置于表列

收集模式

Dapper采用out-of-band进行追踪收集,主要因为

  • in-band收集模式追踪数据在rpc响应头中,会动态影响应用网络
  • in-band收集模式假定rpc调用完美嵌套的,

in-band: 将追踪数据随着调用链进行传送

out-of-band: 通过其他链路进行追踪

收集方式

  • 基于日志:也即将trace、span等信息直接输出到应用日志中,而后汇集所有节点日志,最后推断出完整调用关系

    对网络消息没有侵入,对应用也只有少量侵入,但日志本身并不追求绝对连续与一致性,这意味着追踪结果可能并不准确

  • 基于服务:通过某些手段给目标应用注入追踪探针。探针在结构上可视为一个寄生在目标服务身上的小型微服务系统,它一般会有自己专用的服务注册、心跳检测等功能,有专门的数据收集协议,把从目标系统中监控得到的服务调用信息,通过另一次独立的 HTTP 或者 RPC 请求发送给追踪系统。

    因此,基于服务的追踪会比基于日志的追踪消耗更多的资源,也有更强的侵入性,换来的收益是追踪的精确性与稳定性都有所保证,不必再依靠日志归集来传输追踪数据。

  • 基于边车代理:用于服务网格,应用透明、语言无关、独立通道

性能损耗如何降低?

追踪系统的成本可分为追踪数据生成,追踪数据收集以及追踪数据分析组成。而收集和分析在紧急的时候是可以关闭的,因此追踪生成就成了最关键的损耗

而追踪生成的损耗最关键的则是运行时库创建和销毁span以及annotation,和写入log到硬盘中

写入硬盘合并了多个日志文件写入操作,并异步进行,有效地减少了由于写入log到硬盘造成的性能损耗

此外,dapper还发现

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,distributed,哲学与架构,分布式

从图中可以看到随着采样频率的降低,延时和吞吐量都有性能上的提升。尤其是1/1024的频率下,对吞吐量的影响只有万分之六,而对延时的影响也只有千分之二。

这意味着是不是可以降低采样频率来降低对性能的影响呢?事实上是可以的,即使是降低到1/1024对于大型系统而言仍然有足够的数据进行追踪。

除了对于延时、吞吐量的影响,对于数据储存规模的影响,dapper也做了相应控制。

其使用二阶采样控制数据量大小。通过将traceID hash为0到1之间的度量z,若z小于采用参数,则将采样该数据,写入到bigtable中

总结

  1. 如何记录请求经过多个分布式服务的信息,以便分析问题所在?

    从上文可知通过引入span和trace分别从被追踪者和请求链路两个维度,推断追踪树,从而用于分析问题

  2. 如何保证这些信息得到完整的追踪?

    只要采样的绝对数量够大,那么就比较好追踪。对于分布式的情况,通过span组织的逻辑链路来达成;对于异步,关联到相关的线程;

  3. 如何尽可能不影响服务性能?

    分析收集可以通过动态的开关来保证紧急情况下的性能稳定,而追踪主要是通过尽量减少采样保证的文章来源地址https://www.toymoban.com/news/detail-662359.html

Ref

  1. https://storage.googleapis.com/pub-tools-public-publication-data/pdf/36356.pdf
  2. http://icyfenix.cn/distribution/observability/tracing.html

到了这里,关于分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进阶分布式链路追踪

                            https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “ RocketMQ 消息中间件实战派上下册”是我既“ Spring Cloud Alibaba 微服务架构实战派上下册”之后,又一本历时超过 1 年半的巨无霸技术实战类型的书籍。 为了提高读者阅读本书的体验性,本书

    2024年02月02日
    浏览(44)
  • 分布式链路追踪

    随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。 在大型系统的微

    2024年02月16日
    浏览(40)
  • 分布式链路追踪概述

    随着系统设计变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。往往前端的一个请求需要经过多个微服务、跨越多个数据中心才能最终获取到结果,如下图 并且随着业务的不断扩张,服

    2024年02月13日
    浏览(38)
  • 什么是分布式链路追踪

    随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通信变为分布式消息,这些组件共同构成了繁杂的分布式网络。 在大型系统的微

    2024年02月16日
    浏览(47)
  • 链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述

    目录 OpenTelemetry 是什么? OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是一个为实现可观测性的开源的框架和工具集,用于创建和管理遥测数据,例如 traces,、metric

    2024年02月04日
    浏览(45)
  • 分布式链路追踪之SkyWalking

      在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模块,哪些节点及调用的先后顺序?如何定位每个模块的性能问题?本

    2023年04月20日
    浏览(49)
  • SkyWalking分布式链路追踪学习

    实际生产中,面对几十个、甚至成百上千个的微服务实例,如果一旦某个实例发生宕机,如果不能快速定位、提交预警,对实际生产造成的损失无疑是巨大的。所以,要对微服务进行监控、预警,对微服务的调用链路进行监控,迅速定位问题 SkyWalking下载 SkyWalking官网 elastic

    2024年02月07日
    浏览(40)
  • 分布式链路追踪如何跨线程

    我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 我们可以对以前的 Runable 和 Callable 进行增强。 可以使用 ali 已经存在的实现方式。 TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题 核心的实现思路如下: 1)异步执行前,把当前线程的 MDC 信息放入

    2024年02月07日
    浏览(42)
  • 微服务之分布式链路追踪

    在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 在分布式与微服务场景下,

    2024年04月22日
    浏览(38)
  • 【JAVA】分布式链路追踪技术概论

    目录 1.概述 2.基于日志的实现 2.1.实现思想 2.2.sleuth 2.2.可视化 3.基于agent的实现 4.联系作者 当采用分布式架构后,一次请求会在多个服务之间流转,组成单次调用链的服务往往都分散在不同的服务器上。这就会带来一个问题: 故障难以溯源。 发起请求,然后请求报错,到底

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包