From 4482227d6401e3e8c7a7e6aec45d4a6a98f8c9a2 Mon Sep 17 00:00:00 2001 From: isno Date: Thu, 25 Jan 2024 16:54:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Observability/profiles.md | 6 ++-- Observability/tracing.md | 54 +++++++++++---------------------- assets/zipkin-architecture.png | Bin 0 -> 38500 bytes 3 files changed, 20 insertions(+), 40 deletions(-) create mode 100644 assets/zipkin-architecture.png diff --git a/Observability/profiles.md b/Observability/profiles.md index 0422869a..85da4f8c 100644 --- a/Observability/profiles.md +++ b/Observability/profiles.md @@ -8,9 +8,9 @@ ::: -可以看出,Profiling 是一个关于动态程序分析的术语,很多编程语言或框架也提供了丰富的 Profiling Tools,熟悉 Go 语言的朋友一定了解 pprof,当运行异常时,通过 pprof CPU profiling 或者 Memory profiling 分析函数耗时以及内存占用情况。其他语言也有 pprof 的实现,例如 Rust 的 pprof-rs。 +可以看出,Profiling 是一个关于动态程序分析的术语,很多编程语言或框架也提供了丰富的 Profiling Tools,熟悉 Go 语言的朋友一定了解 pprof,当运行异常时,通过 pprof CPU profiling 或者 Memory profiling 分析函数耗时以及内存占用情况,展示形式以 Flame Graph 火焰图表达。其他语言也有 pprof 的实现,例如 Rust 的 pprof-rs。 -而 Profiles 则 Profiling 分析的对象,性能分析数据的展现形式通常以 Flame Graph 火焰图表达。可观测中的 Profiles 一般包括: +可观测中的 Profiles 聚焦在理解资源是如何在系统中被分配的,一般包括: - CPU Profilers - Heap Profilers @@ -19,4 +19,4 @@ - IO Profilers - Language-specific Profilers(e.g. JVM Profiler) -Traces 让我们了解延迟问题是分布式系统的的哪个部分导致的,而 Profiles 则我们进一步定位到具体的函数具体的代码。 +Traces 让我们了解延迟问题是分布式系统的的哪个部分导致的,而 Profiles 则使我们进一步定位到具体的函数具体的代码,更加深入挖掘并理解那些导致延迟问题存在的原因,是回答从“是什么”到“为什么”的重要数据。 diff --git a/Observability/tracing.md b/Observability/tracing.md index 3ec64553..6d7d3b3a 100644 --- a/Observability/tracing.md +++ b/Observability/tracing.md @@ -1,68 +1,48 @@ # 9.4 链路追踪 -微服务架构中,每个完整的请求会跨越多个服务(数十个甚至数百个),并在期间产生多次网络、RPC、消息、数据库等调用。参阅 Uber 公开的技术文档信息,它们的架构大约有 2,200 个服务,这个级别的微服务相互依赖的链路关系有多么复杂,笔者引用 Uber 博客中的配图[^1],让你直观感受下。 +微服务架构中,每个完整的请求会跨越多个服务(数十个甚至数百个),并在期间产生多次网络、RPC、消息、数据库等调用。参阅 Uber 公开的技术文档信息,它们的架构大约有 2,200 个服务,这个级别的微服务相互依赖的链路关系引用 Uber 博客中的配图[^1],供你直观感受。而分布式链路追踪所要做的事情就是通过请求粒度的轨迹追踪与数据透传,实现服务之间的确定性关联。

Uber 使用 Jaeger 生成的追踪链路拓扑

+ 分布式链路追踪诞生的标志性事件就是 Google Dapper 论文的发表。2010年4月,Benjamin H. Sigelman 等人在 Google Technical Report 上发表了《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》[^2]。 -Dapper 论文详细阐述了分布式链路追踪的设计理念,还提出了成为后续链路追踪系统设计的共识的两个概念:“追踪”(Trace)和“跨度”(Span)。 +Dapper 首先明确了分布式链路追踪的两个目标:任意部署和持续监控,进而给出了三个具体的设计准则: + +- 低开销:额外数据采集的资源开销不能影响核心的业务系统 +- 应用级透明:对应用开发透明,无需开发人员的协助,降低接入门槛 +- 可扩展性:在未来相当长的一段时间内,随着业务的告诉发展,任然可以有效运转 -一条 Trace 代表一次入口请求在 IT 系统内的完整调用轨迹及其关联数据集合。其中,全局唯一的链路标识 TraceId,是最具代表的一个属性。通过 TraceId 我们才能将同一个请求分散在不同节点的链路数据准确的关联起来,实现请求粒度的“确定性关联”价值。这也是 Trace 区别于 Metrics、Log 其他两类可观测技术的关键属性。光有 TraceId 还不够,请求在每一跳的接口方法上执行了什么动作、耗时多久、执行状态是成功还是失败?承载这些信息的记录就是跨度(Span)。 +Dapper 论文详细阐述了分布式链路追踪的设计理念,还提出了成为后续链路追踪系统设计的共识的两个概念:“追踪”(Trace)和“跨度”(Span)。一条 Trace 代表一次入口请求在 IT 系统内的完整调用轨迹及其关联数据集合。其中,全局唯一的链路标识 TraceId,是最具代表的一个属性。通过 TraceId 我们才能将同一个请求分散在不同节点的链路数据准确的关联起来,实现请求粒度的“确定性关联”价值。光有 TraceId 还不够,请求在每一跳的接口方法上执行了什么动作、耗时多久、执行状态是成功还是失败?承载这些信息的记录就是跨度(Span)。 -每一次 Trace 实际上都是由若干个有顺序、有层级关系的 Span 所组成一颗“追踪树”(Trace Tree),如下图所示。通过 TraceId 将一次请求的所有链路日志进行组装,就能还原出该次请求的链路轨迹, +每一次 Trace 实际上都是由若干个有顺序、有层级关系的 Span 所组成一颗“追踪树”(Trace Tree),如下图所示。通过 TraceId 将一次请求的所有链路日志进行组装,就能还原出该次请求的链路轨迹。

Trace 和 Spans

-## 生态 - -在没有形成大一统标准的早期,Dapper 的思想和协议影响了大量的开源项目。 - -受到 Dapper 的启发,Twitter 开发了自己的分布式追踪系统 Zipkin -Twitter 与 2012年开源了 , Uber 于 2017年 开源了 Jaeger。即使在今天,Zipkin和 jaeger 仍然是最流行的分布式追踪工具之一。 +在没有形成大一统标准的早期,Dapper 的思想和协议影响了大量的开源项目。受到 Dapper 的启发,Twitter 开发了自己的分布式追踪系统 Zipkin,Zipkin 是第一个被广泛采用的开源的分布式链路追踪系统,提供了数据收集、存储和查询的功能以及友好的 UI 界面来展示追踪信息。
- -

CNCF 下分布式追踪系统生态

+ +

Zipkin 架构图

-随着分布式追踪技术的日益流行,有一个问题也日益突出,不同链路追踪系统和工具之间缺乏兼容性,如果使用了一个追踪系统,很难再切换到另一个。 - - -CNCF 技术委员会发布了 OpenTracing 和 微软推出的 OpenCensus 两个竞品在 2019 年忽然宣布握手言和,共同发布了可观性的终极解决方案 OpenTelemetry。 - - - -## 追踪技术的核心 +2017年 Uber 在基于 Zipkin 思想和经验的基础上开源了 Jaeger,增加了自适应采样、提供了更加强大和灵活的查询能力等,后来 Jaeger 成为 CNCF 的托管项目,并在 2019年 成为 graduated 级别。即使在今天,Zipkin 和 Jaeger 仍然是最流行的分布式追踪工具之一。 -**1.基于日志的追踪**,基于日志追踪的思路是将 trace、span 等信息直接输入到应用日志中,然后随着所有节点的日志归集过程汇聚到一起,再从全局日志信息中反推出完成调用链拓扑关系。 +Zipkin 和 Jaeger 或多或少都对业务代码有侵入性,国内的工程师应该熟悉一款基于字节码注入具有无侵入性特点的 Skywaling ,这是一款本土开源的的调用链分析以及应用监控分析工具,特点是支持多种插件,UI 功能较强,接入端无代码侵入(Java Agent 技术)。 -这种方式的缺点是直接依赖日志归集过程,日志本身不追求绝对的连续与一致,这就导致基于日志的追踪,往往不如下面两种追踪实现来的精确。 +最后,无论是 Zipkin 还是 Jaeger 又或者 Skywaling,如何选择还是要参考采集的方式(无侵入、侵入)以及数据收集的开销。 -日志追踪的代表产品是 SpringCloud Sleuth。 -**2.基于服务的追踪**,基于服务的追踪是目前最为常见的追踪实现方式,被 Zipkin、SkyWalking、Pinpoint 等主流追踪系统广泛采用。基于服务追踪的实现思路是通过某些手段给目标应用注入追踪探针(Probe),譬如针对 Java 应用,一般就通过 Java Agent 注入。 - -探针可以看做是一个寄生在目标服务身上的一个小型微服务系统,它一般会有自己的专用服务注册、心跳检测等功能,有专门的数据收集协议,可以把从目标系统监控得到的服务调用信息,通过另一次独立的 HTTP 或者 RPC 请求发送给追踪系统。 - -因此,基于服务方式的追踪系统会比基于日志的追踪消耗更多的资源,也具有更强的侵入性,而换来的收益就是追踪的精确性和稳定性都有保证,不必再依靠日志归集来传输跟踪数据。 - - -**3.基于边车代理的追踪**,服务网格的专属方案,也是最理想的分布式追踪模型,边车代理对应用完全透明,有自己独立数据通道,追踪数据通过控制平面上报,无论对日志服务本身还是,都不会有依赖和干扰;它与程序语言无法,无论应用采用什么编程语言,只要它通过网络(HTTP或 gRPC)访问服务,就可以被追踪到。如果非要总结种方式的实现有什么缺点,就是边车代理本身对应用透明的原理,决定了它只能实现服务调用层面的追踪。 - -现在,市场占有率最高的 Envoy 就提供了完善的追踪功能,但没有提供自己的界面端和存储端,需要配合专门的 UI 与存储系统来使用,不过 SkyWalking、Zipkin、Jaeger 等系统都可以接受来自 Envoy 的追踪数据。 - - - -## 未来 +随着分布式追踪技术的日益流行,有一个问题也日益突出,不同链路追踪系统和工具之间缺乏兼容性,如果使用了一个追踪系统,很难再切换到另一个。 +CNCF 技术委员会发布了 OpenTracing 和 微软推出的 OpenCensus 两个竞品在 2019 年忽然宣布握手言和,共同发布了可观性的终极解决方案 OpenTelemetry。 [^1]: 参见 https://www.uber.com/en-IN/blog/microservice-architecture/ diff --git a/assets/zipkin-architecture.png b/assets/zipkin-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1d80b0de7e582f2e02ed250fc5818cc31e7ed3c3 GIT binary patch literal 38500 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

LZ6t`tyb9yWw^du4jVx=Lne97|ZbJSO-3$OB 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 literal 0 HcmV?d00001