写点什么

以 Dapper、Zipkin 和 LightStep [x]PM 为例阐述分布式跟踪的过去、现在和未来

  • 2018-03-06
  • 本文字数:4251 字

    阅读完需:约 14 分钟

核心要点

  • 在观测分布式系统和微服务时,分布式跟踪已经成为一个越来越重要的组件。现在有一些流行的开源标准和框架,比如 OpenTracing API 和 OpenZipkin;
  • 分布式跟踪的基本理念是非常简单直接的:在系统中,特定请求的转折点必须要识别出来并且要检测。所有的跟踪数据需要协调和整理,为请求提供一个有意义的流视图;
  • 请求跟踪在理念上类似于应用性能管理(Application Performance Management,APM),这两个生态系统都面临一个挑战,那就是不断增长的大规模系统所生成的大量数据;
  • Google 在实现其分布式监控系统 Dapper 时解决了这个问题,他们采取的方式是采样跟踪,一般是 1000 个请求中采样 1 个请求,但是现代的商业跟踪产品都宣称能够分析 100% 的请求。

在观测分布式系统和微服务时,分布式跟踪成为一个越来越重要的组件。本文将会介绍该技术,让读者对其有一个整体的了解,首先我们会探讨一下 Google 的 Dapper 请求跟踪论文,该论文反过来促成了 Zipkin 和 OpenTracing 项目的创建,随后我们会与 Ben Sigelman 讨论一下请求跟踪的未来,他是新的 LightStep [x]PM 跟踪系统的创建者。

正如最初的 Dapper 论文所述,现代互联网服务通常实现为复杂的大规模系统,比如采用流行的微服务架构模式。应用是由一组服务组合起来的,这些服务可能是由不同的团队开发的,而且可能采用不同的编程语言。在 Google 这种级别,应用会跨越多个基础设施的上千台机器,即便是相对较小的云计算用例,推荐的做法也是使用跨地域的“availability zone”和“region”运行服务的多个版本。在这种复杂的系统和环境中,能够辅助我们理解系统的行为、帮助调试和排查性能问题的工具是非常有价值的。

分布式跟踪的基本理念是非常简单直接的:在系统、应用、网络以及中间件中,请求(一般是用户发起的)路径上的每个转折点,甚至可以说每个点必须要识别并检测(instrument)。这些点有着特殊的意义,因为它们通常代表了执行流上的分支,比如使用多个线程并行处理、进行异步计算或者发起进程外的网络调用。这些独立生成的跟踪数据必须要收集、协调和整理,在系统范围内为请求提供一个有意义的流视图。 Cindy Sridharan 提供了一个非常有用的指南,该指南探讨了请求跟踪的基本原理,并将这项技术应用于现代监控和“可观察性(observability)”的两大支柱之中:日志和指标收集。

剖析Trace

按照云原生计算基金会(Cloud Native Computing Foundation,CNCF) OpenTracing API 项目的定义, trace 能够告诉我们事务或工作流在整个系统的传播过程中经历的所有事情。在 OpenTracing 和 Dapper 中,trace 是由“span”所组成的一个有向无环图(directed acyclic graph,DAG),在有些工具中“span”也被称为“segment”,比如在 AWS X-Ray 中。span 是一个带有名称和计时的操作,它代表了 trace 中一个持续的工作片段。被检测的组件还可以将额外的上下文注释(元数据或“ baggage ”)添加到 span 中,例如,应用开发人员可能会使用一个跟踪 SDK 添加任意的 key-value 条目到当前的 span 中。需要注意的是,添加注释数据会带来内在的侵入性:添加注释的组件必须要感知跟踪框架的存在性。

Trace 数据一般会“按照不同的频道(out of band)”进行收集,并写入到本地数据文件中(由 agent 或 daemon 来生成),然后通过单独的网络进程拉取到中心化的存储中,这与当前日志和指标收集的做法非常类似。Trace 数据不会添加到请求本身上,因为这样能够保持请求的大小和语义不发生变化,本地存储的数据会在方便的时候被拉取到出来。

当请求初始化的时候,将会生成一个“parent” span,该 span 可以与多个“child” span 建立具有因果关系和临时的关联。图 1 来源于 OpenTracing 的文档,以可视化的方式展现了一个请求流中一系列的 span 及其关联关系。这种类型的可视化会添加一些上下文信息,包括时间、服务调用的层级以及进程 / 任务执行的串行或并行性。这种视图能够突出显示系统的关键路径,并且为我们提供了一个起点,让我们识别瓶颈以及需要提升的地方。很多分布式跟踪系统还提供了 API 或 UI,实现对 span 细节的进一步“钻取”。

图1 按照请求的生命线,以一系列span 的形式可视化基本的跟踪(图片来源于 OpenTracing 文档

实现分布式跟踪所面临的挑战

在历史上,为各种类型的分布式系统实现分布式跟踪会面临很多挑战。例如,使用多种编程语言实现的微服务架构可能并没有共享通用的检测点。Google 和 Twitter 分别创建了 Dapper 和 Zipkin 来实现跟踪,这相对较为简单,因为它们大多数的跨进程(跨服务)通信是通过同质的 RPC 框架完成的,Google 创建了 Stubby (它的一个开源变种就是 gRPC ),Twitter 则创建了 Finagle

Dapper 论文明确跟踪的价值只能通过如下的方式才能体现出来:(1)广泛部署,也就是系统的所有组成部分都要纳入检测,不能出现“黑点(dark)”;(2)持续监控,也就是系统必须要一直处于监控之中,因为感兴趣的异常事件通常难以再现。

“service mesh”网络代理的流行程度正在不断上升,比如 Envoy Linkerd Conduit (以及关联的控制层,如 Istio ),它们可能会推进多类型分布式系统中跟踪功能的采用,因为它们能够提供缺失的通用检测点。Sridharan 在它的 Medium 博客文章中详细讨论了可见性的问题:

“Lyft 为所有的应用提供了跟踪支持,通过采用service mesh 模式[使用Envoy 代理],无需更改一行代码。Service mesh 能够帮助实现可见性,这是通过在mesh 级别实现跟踪和状态收集做到的,它允许我们将单个服务视为黑盒,但是依然能够在整个mesh 级别实现非常棒的可见性”;

对速度的需求:请求跟踪与APM

Web 页面的加载速度会极大地影响用户的行为和转变。Google 使用其搜索引擎运行了一个延迟实验,他们发现如果将结果页面的展现增加100 到400 毫秒的延迟,将会显著影响用户执行搜索的次数。Greg Linden 提到,在2006 年Amazon.com 运行了一个实验,如果页面加载的延迟增加100 毫秒,将会造成收入的大幅下降。尽管理解整个系统中Web 请求的流程非常具有挑战性,但是识别和消除性能瓶颈会带来显著的商业收益。

请求跟踪的理念类似于应用性能监控(Application Performance Management,APM),它们都与监控有关,并且都关系到软件应用的性能和可用性的管理。APM 的目标在于探查和诊断复杂应用的性能问题,达到预期的服务等级协议(Service Level Agreement,SLA)。现代软件架构的分布式特性在不断增加,APM 工具也进行了适配以监控(可视化)这种类型的软件。图2 展现了开源的 Pinpoint APM 工具的可视化界面,类似的视图在商业工具中也能见到,比如 Dynatrace APM New Relic APM

图2 现代APM 工具中的跟踪(图片来源 Pinpoint APM GitHub 仓库

在请求跟踪和 APM 领域都面临一项挑战,那就是大规模系统不断生成的大量数据。AWS 云架构战略(Cloud Architecture Strategy)的 VP Adrian Cockcroft 说到,公有云能够让大众更容易地使用强大且可扩展的基础设施和服务,但是监控系统必须要比被监控的系统 更加可用(也要更加可扩展)。Google 在实现Dapper 时通过采样跟踪解决了这个问题,一般是1000 个请求中采样1 个请求,他们发现通过这种比例依然能够生成有意义的观察结果。很多的工程师和思想领袖都在从事该领域的工作,包括可观察性平台Honeycomb 的CEO Charity Majors ,他们都相信监控数据的采样是非常重要的

这非常简单:如果你不采样的话,就无法扩展。如果你认为这是一种有争议的说法的话,那么说明你还没有真正处理过大规模的可观察性,或者你之前做得非常糟糕和浪费。

InfoQ 最近参加了在美国奥斯汀举行的 CNCF CloudNativeCon ,并与 Ben Sigelman 进行了交流,他是 Dapper 论文的作者之一,同时也是 LightStep 的 CEO 和联合创始人,他最近宣布了一个新的商用跟踪平台“LightStep [x]PM”。Sigelman 讨论了LightStep 的非传统架构(它会在本地安装的agent 上使用机器学习技术),允许分析100.0% 的事务数据,而不是Dapper 所实现的0.01%:

“我们过去和现在依然构建的工具对长期的性能分析是非常重要的,但是为了应对被监控系统的规模,Dapper 只会中心化地记录0.01% 的性能数据,这意味着在特定的使用场景下,它是难以应对的,比如实时的事件响应(‘也就是最紧急的’)”。

LightStep 在过去的 18 个月中已经与很多客户合作过,包括 Lyft(使用 Envoy 代理作为集成点)、Twilio、GitHub 和 DigitalOcean,业已证明他们的方案能够处理大量的数据:

“Lyft 给我们发送了大量的数据,LightStep 每天分析 100,000,000,000 个微服务调用。乍一看上去,这是数据全是噪音,没有什么有用的信息:大量的数据混杂在一起并且不相关,但是通过全盘考虑,LightStep 能够衡量出性能是如何影响 Lyft 的不同方面的,然后使用端到端的跟踪展现问题和异常情况,这种跟踪能够从移动应用一直延伸到微服务技术栈的底部。”

LightStep [x]PM 目前可以作为 SaaS 平台来使用。Sigelman 想要强调的是,尽管可以分析 100% 的请求,但是在本地安装的 agent 所收集的数据并不会全部传送到中心化的平台中。Sigelman 将这个产品视为”新一代的 APM“工具,如果用户正在寻找针对复杂分布式应用的性能监控和自动分析的工具的话,那么它可以为用户带来价值。

结论

在分布式系统中,响应延迟可能会带来严重的商业影响,但是理解复杂系统中的请求流并识别瓶颈也是很有挑战性的任务。通过使用分布式跟踪,再结合其他的技术,如日志和监控指标,能够了解分布式应用的内部状况,这些应用可能是采用微服务的架构模式创建的。在分布式跟踪领域,开放的标准和工具正在不断组合,比如 OpenTracing API 和 OpenZipkin,商业的工具也在涌现,可能会与现有的 APM 供应商产生竞争。在为现代互联网服务实现分布式跟踪时,会面临一些挑战,比如处理大量的跟踪数据并生成有意义的输出,但是开源的生态系统和供应商正在应对这些挑战。

关于作者

Daniel Bryant 一直在组织内部和技术方面引领变化。他目前的工作包括通过引入更好的需求收集和计划技术推进企业内部的敏捷性,关注于敏捷开发中的架构关联性,并且搭建持续集成 / 交付环境。Daniel 现在的技术专长是“DevOps”工具、云 / 容器平台和微服务实现。他还是伦敦 Java 社区(LJC)的领导者,参与多个开源项目,为 InfoQ、DZone 和 Voxxed 这样的技术网站撰写文章,并且经常在 QCon、JavaOne 和 Devoxx 这样的国际会议上发表演讲。

查看英文原文: Distributed Tracing: Exploring the Past, Present and Future with Dapper, Zipkin and LightStep [x]PM

2018-03-06 16:395425

评论

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

跨云厂商的不停机数据库迁移!使用NineData就可以了

NineData

Google 数据库迁移 多云架构 无停机数据库迁移 跨云厂商

MES给制造业带来看得见的效益

万界星空科技

数字化 工业互联网 制造业 mes 万界星空科技

Tuxera NTFS 2021破解版下载 Mac版NTFS工具推荐

Rose

立即注册 | 线上讲座:基于 NGINX 为现代应用构筑三大安全防线

NGINX开源社区

nginx DevOps DOS攻击 OWASP十大漏洞 NGINX PLUS

得物质量管理体系的建设与应用

得物技术

测试 质量 企业号 2024年5月 PK 榜

NineData亮相GOPS大会:揭秘新时代企业级数据库DevOps最佳实践

NineData

数据库 DevOps 工具 NineData SQL IDE

autocad2023破解版下载 含cad2023中文汉化包 Mac&Windows系统

Rose

苹果mac好用的SSh终端工具:SecureCRT for mac附最新许可文件

Rose

什么是蜜罐,在当前网络安全形势下,蜜罐能提供哪些帮助

德迅云安全杨德俊

vm虚拟机 mac版下载 vm虚拟机 含VMware Fusion Pro 12永久许可密钥

Rose

ClickHouse沙龙来了,NineData将分享数据管理与同步的关键技术!

NineData

Clickhouse Meetup 杭州 NineData 迁移同步

Oracle到PostgreSQL的不停机数据库迁移!

NineData

oracle postgresql NineData 无停机迁移 异常告警

苹果M1/M2电脑安装Lightroom Classic 2022(LRC2022) 后打开闪退怎么办?

Rose

JetBrains Rider 2024永久注册码 mac/win 跨平台.NET IDE集成开发

Rose

油猴浏览器辅助插件 Tampermonkey for Mac安装教程

Rose

MacDroid for mac:轻松实现mac与安卓设备数据互通

Rose

适用于Windows、Mac平台:Sublime Text代码编辑器 含注册码

Rose

NineData云原生智能数据管理平台新功能发布|2024年4月版

NineData

sql 数据迁移 数据备份 NineData 对比工具

教你如何搞定springboot集成kafka

华为云开发者联盟

kafka springboot 华为云 华为云开发者联盟 企业号2024年5月PK榜

API主导的商业模式是否将在AI时代蓬勃发展?

幂简集成

AI API

报名开启|智能化可观测:可观测开源开发者Meetup

TRaaS

活动报名

抖音商品详情:短视频电商的新风向

Noah

零知识证明与同态加密:隐私计算的双剑

EquatorCoco

区块链 零知识证明 同态加密

腾讯、阿里、B站最新面经汇总,有的妥妥的凉经

王中阳Go

golang 面试题 大厂面经 Go进阶

记一次被黑的经验教训

zhumingwu

AWS RDS & ElasticCache 监控可观测最佳实践

观测云

AWS

Desktop Goose for Mac(抖音桌面宠物鹅),让你的苹果电脑桌面更加生动有趣!

Rose

漆包线行业你了解多少?专业漆包线行业MES生产管理系统

万界星空科技

制造业 mes 万界星空科技 漆包线mes 漆包线

观测云产品更新 | 监控、场景仪表板、查看器、服务管理、DQL等

观测云

监控

以Dapper、Zipkin和LightStep [x]PM为例阐述分布式跟踪的过去、现在和未来_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章