写点什么

开源分布式跟踪方案概览

  • 2019 年 8 月 13 日
  • 本文字数:2969 字

    阅读完需:约 10 分钟

开源分布式跟踪方案概览

本文最初发表于RedHat的开发者博客,经 RedHat 和原作者 Juraci Paixão Kröhling 授权由 InfoQ 中文站翻译分享。


入门分布式跟踪可能是一项很艰难的任务。这个领域有太多新术语、框架和工具,它们有着明显互相重叠的功能,初学者很容易迷失或偏离主题。本文对最流行的工具进行了概述和分类,能够帮助你掌握分布式跟踪领域的概况。


虽然跟踪和采样分析是密切相关的两个学科,但是分布式跟踪通常被理解将应用中不同工作单元的信息连接在一起,以便理解整个事件链的技术,这些工作单元会在不同的进程或主机中执行。在现代应用程序中,这意味着分布式跟踪可以用来描述 HTTP 请求在穿越大量微服务时的情况。


这里所列的大多数工具可以大致分为 instrumentation 库、tracer、分析工具(analysis tool,后端+UI),以及它们的任意组合。博文“各种跟踪方式的差异”很好地描述了分布式跟踪的这三个方面。


对于本文来讲,我们将 instrumentation 定义为用来告诉记录哪些信息的库,将 tracer 定义为如何记录并提交数据的库,将分析工具定义为接收跟踪信息的后端。在现实中,这些分类是不断变化的,instrumentation 和 tracer 的区别并不会始终那么明显。类似的,分析工具这个术语可能会过于宽泛,因为有些工具会关注探索跟踪信息,而有些则是完整的可观察性平台。


本指南只列出了开源的项目,不过还有一些其他的厂商和解决方案值得关注,比如 AWS X-Ray、Datadog、Google Stackdriver、Instana、LightStep 等。


Apache SkyWalking

InstrumentationTracer分析工具


Apache SkyWalking 最初是在 2015 年作为一个理解分布式系统的培训项目而开发的。创建之后,它在中国流行起来,致力于成为一个完整的应用程序性能监控平台(Application Performance Monitoring,APM),它主要关注通过代理实现自动化的 instrumentation 并与现有的 tracer(比如 Zipkin 和 Jaeger 的 tracer)或基础设施组件进行集成(如服务网格)。Skywalk已经被提升为 Apache 基金会的顶级项目。


Apache(Incubating) Zipkin

InstrumentationTracer分析工具


Apache(Incubating) Zipkin最初是由 Twitter 开发的并于2012年开源。它是最成熟的开源跟踪系统之一,并激发了几乎所有的现代分布式跟踪工具。Zipkin 是一个完整的跟踪解决方案,包括 instrumentation 库、tracer 和分析工具。数据的传播格式B3目前是分布式跟踪的通用语言,另外它的数据格式也得到了其他工具的原生支持,比如数据生成端的Envoy Proxy和消费端的其他跟踪解决方案。Zipkin 的优势之一是拥有大量高质量的框架 instrumentation 库。


Haystack

InstrumentationTracer分析工具


Haystack是一个具有类似 APM 能力的跟踪系统,比如异常检测(anomaly detection)和趋势可视化。它最初是 Expedia 开发的,其技术架构非常关注高可用性。Haystack 利用 OpenTracing 作为它主要的 instrumentation 库,并且像Pitchfork这样的附加组件可以以其他格式摄取数据。


Jaeger

InstrumentationTracer分析工具


Jaeger最初是由 Uber 开发的,并于2017年开源,在此之后,该项目转移至了云原生计算基金会(Cloud Native Computing Foundation,CNCF)。我们可以在 Jaeger 最初的架构、数据模型和命名法中看到来自 Dapper 和 Zipkin 的灵感,但是它的发展已经超出了这个范围。对于 instrumentation 部分,Jaeger 利用 OpenTracing API,该 API 从一开始就是一等公民。分析工具非常轻量级,非常适合用于开发阶段和高度弹性的环境(例如多租户 Kubernetes 集群),并且它是Istio等工具的默认跟踪器。


OpenCensus

InstrumentationTracer分析工具


OpenCensus最初是谷歌基于其内部跟踪平台开发的,它既是一个 tracer,也是一个 instrumentation 库。它的 tracer 可以连接到“导出器”,向 Jaeger、Zipkin 和 Haystack 等开源分析工具发送数据,也可以向 Instana 和谷歌 Stackdriver 等该领域的供应商发送数据。除了 tracer 之外,OpenCensus Agent 还可以用作进程外的导出器,允许 instrumented 的应用程序完全不受数据终点的分析工具的影响。OpenCensus 的另一个方面就是跟踪,最终得到度量指标。它在框架 instrumentation 库方面还没有那么丰富,但是一旦与 OpenTracing 项目的合并完成,这一点可能会有所改观。


OpenTracing

InstrumentationTracer分析工具


如果说在分布式跟踪的 instrumentation 方面有什么接近标准的东西的话,那就是OpenTracing。这个由CNCF托管的项目是由在各种场景中实现分布式跟踪系统的人员启动的,包括供应商、用户和内部实现的开发人员。在项目的一端,有许多框架 instrumentation 库,比如 JAX-RS、Spring Boot 或 JDBC。另一方面,有一些 tracer 完全支持 OpenTracing API,包括 Jaeger 和 Haystack,以及该领域的知名的供应商,如 Instana、LightStep、Datadog 和 New Relic。Zipkin 也有兼容的实现。


OpenTracing + OpenCensus

InstrumentationTracer分析工具
?/✓?/✓


OpenTracing 最近宣布将与 OpenCensus合并。虽然目前还不清楚未来的工具会是什么样子,甚至不知道它将如何命名,但这肯定是值得关注的。目前,它们已经发布了一个暂定的路线图以及一些具体的代码建议,展示了这个新工具的方向。


Pinpoint

InstrumentationTracer分析工具


Pinpoint最初是由Naver在 2012 年开发的,并于 2015 年开源。它包含 APM 功能,具有网络拓扑、JVM 遥测图和跟踪视图的特性。Instrumentation 只能通过代理完成,可以通过插件进行扩展。这种方法的优点是,instrumentation 不需要代码变更,但缺点是,它缺乏对显式 instrumentation 的支持。Pinpoint 适用于基于 PHP 和 JVM 的应用程序,在这个领域,它对框架和库提供了广泛的支持。


Veneur

InstrumentationTracer分析工具


Veneur项目是由 Stripe 发起的,它可以描述为可观察性数据的管道。它与本指南中几乎所有其他工具的不同之处在于,它对可观察性应该是什么有自己的见解:span。它附带了一组本地代理(称为“sink”),这些代理能够接收 span,从中提取或聚合数据,并将输出发送到像 Kafka 这样的外部系统。为了更好地实现这一点,Veneur 提供了自己的数据格式SSF。指标可以嵌入到 span 中,也可以基于“常规”span 数据进行汇总/聚合。


Dapper

Dapper 分布式跟踪解决方案起源于谷歌,并在2010年的一篇论文中进行了描述。它是这里所列的大多数工具的共同祖先,包括 Zipkin、Jaeger、Haystack、OpenTracing 和 OpenCensus。虽然 Dapper 并不是一种可以直接下载和安装的解决方案,但是该论文依然是现代分布式跟踪解决方案中所使用原语(primitive)的参考资料,并且有助于了解设计决策背后的原因。


W3C Trace Context

在当前分布式跟踪生态系统中,一个很大问题就是使用不同 tracer 检测的应用程序之间的互操作性。为了解决这个问题,万维网联盟(World Wide Web Consortium,W3C)成立了分布式跟踪工作组(Distributed Tracing Working Group ),负责传播格式的Trace Context推荐方案。


所有项目的概览

项目InstrumentationTracer分析工具
Apache SkyWalking
Apache (Incubating) Zipkin
Haystack
Jaeger
OpenCensus
OpenTracing
OpenTracing + OpenCensus?/✓?/✓
Pinpoint
Veneur


原文链接:


A guide to the open source distributed tracing landscape


2019 年 8 月 13 日 11:287446

评论

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

ASCII对照表

入门小站

工具

Springboot+quartz源码探索

4ye

Java 后端 springboot quartz 8月日更

面试侃集合 | LinkedBlockingQueue篇

码农参上

队列 Queue 8月日更

想知道你未来宝宝长什么样吗?

华为云开发者联盟

modelarts 图像 图像生成 父母照片 照片

【设计模式】模板方法模式

Andy阿辉

C# 后端 设计模式 8月日更

字节跳动《实时音视频通讯技术》学习笔记之服务器端开发入门

Regan Yue

git 字节跳动 Go 语言 8月日更

Linux之alias命令

入门小站

Linux

方法调用:一看就懂,一问就懵?

阿Q说代码

8月日更 虚方法 非虚方法 静态分派 动态分派

数据传输过程的序列化,你了解吗

卢卡多多

序列化 8月日更

SpringBoot 自动装配源码解析

Rubble

8月日更

【LeetCode】反转字符串 IIJava题解

Albert

算法 LeetCode 8月日更

LeetCode题解:2. 两数相加,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

图解:为什么非公平锁的性能更高?

王磊

Java 8月日更

再谈安全架构《一》

I

读书笔记 方法论 安全架构 企业安全 安全建设

数字化为企业带来哪些价值?

boshi

数字化转型

埋土灰

箭上有毒

8月日更

【Flutter 专题】62 图解基本 Button 按钮小结 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

Python代码阅读(第14篇):列表求并集

Felix

Python 编程 Code Programing 阅读代码

架构训练营模块二作业

高铎

架构实战营

DCS_FunTester分布式压测框架更新(三)

FunTester

分布式 性能测试 测试框架 测试开发 FunTester

架构训练营模块三作业

高铎

微博评论高性能高可用架构设计

tjudream

高可用架构 微博评论 高性能计算架构 多级负载均衡 多级缓存

BPM敏捷Activiti开发平台,工作流引擎springboot整合activiti

金陵老街

Java MySQL Vue springboot Activiti

NDK 编译代码(一)

Changing Lin

8月日更

Android开发:获取当前系统时间和日期的方法

三掌柜

8月日更 8月

vue入门:element组件与动画使用

小鲍侃java

8月日更

是时候封装限制 UITextField、UITextView 的最大字符长度了

fuyoufang

swift iOS 知识体系 8月日更

架构训练营模块四作业

高铎

架构实战营

Python对系统数据进行采集监控——psutil

Python研究者

8月日更

神策分析 iOS SDK 全埋点解析之启动与退出

神策技术社区

程序员 大前端 后端 代码 神策数据

手撸二叉树之二叉树的层平均值

HelloWorld杰少

数据结构与算法 8月日更

开源分布式跟踪方案概览_开源_Juraci Paixão Kröhling_InfoQ精选文章