Envoy 代理如何处理用户请求以实现追踪

深入探讨 Envoy 代理在云原生环境中如何处理用户请求,实现分布式追踪,提升应用可观测性。

阅读原文请转到:https://jimmysong.io/blog/envoy-tracing/

在云原生环境中,提升对应用程序的可观测性以更好地理解用户体验是至关重要的。然而,单纯依靠指标和日志无法提供个别案例的具体细节。这时,追踪(Tracing)技术就显得尤为重要。

追踪的基本原理

追踪通过为每个用户请求附加一个关联 ID,向开发人员提供完整的用户体验上下文。这个关联 ID 就像一根线,将跨越多个服务的追踪串联起来,从而实现全面的可观测性。

下图展示了 Envoy 处理用户请求的流程。

442473db9f77f4f85d5cf94e79cf9797.png

用户请求与 Envoy 代理的处理流程图

追踪可以通过为每个用户请求附加一个关联 ID,向开发人员提供完整的用户体验上下文。这个关联 ID 就像一根线,将跨越多个服务的追踪串联起来。

尽管所有请求都会经过 Envoy 代理,但 Envoy 无法独立提供完整的追踪信息。它只看到应用程序作为网络的一部分,无法洞察内部处理。这使得 Envoy 无法区分入站请求和出站请求是否来自同一个用户,因此无法自动转发追踪上下文。

服务网格中的请求上下文

Envoy 可以在 Istio 服务网格中作为 Sidecar 或 Waypoint 代理,下图展示了 Envoy 在服务网格中如何处理请求上下文的。

1. 用户请求的开始

追踪涉及通过多个服务跟踪路径,以理解用户体验的完整上下文。追踪从一个用户请求开始,该请求被分配了一个关联 ID。

9f934f850fa259e13df562f33f77112d.png

用户请求的开始

2. 请求通过 Envoy 代理

Envoy 位于应用程序旁边,所有进入的请求都会经过 Envoy。

1789a194765469c9d0f3aec0fb92dbe0.png

用户请求的开始

3. Envoy 附加额外的 Headers

Envoy 可以在请求中附加额外的 Headers,以收集关于应用程序内部发生情况的信息。

f0a3cb70dffb54057731080cf1178803.png

Envoy 附加额外的 Headers

4. 应用程序处理请求并调用后端服务

应用程序在处理请求的过程中,可能需要联系其他系统来处理该请求。比如外部的认证和授权服务。

ecf9dcd05f399fddac9cd0c0e1dff187.png

应用程序处理请求并调用后端服务

5. 应用程序需要复制关联 ID

应用程序知道出站请求是代表哪个入站请求发起的(例如 Trace ID 为 1234 的请求)。但是,Envoy 并不知道这一点。因此,应用程序需要将关联 ID 等上下文从入站请求复制到出站请求中。

48eb88f444fcc06abee421dafcaec7ef.png

应用程序需要复制关联 ID

6. 多个请求的并发处理

在实际场景中,应用程序同时处理多个用户请求,这导致了并发性。由于 Envoy 只能看到网络层面的请求和响应,无法区分这些请求之间的因果关系。

760a9ef37b395f1c5ace9c0ea5d1ff91.png

多个请求的并发处理

7. Envoy 的局限性

因为 Envoy 无法看到应用程序内部的处理逻辑,它只能看到一系列的网络请求和响应,无法知道哪些出站请求是由哪些入站请求触发的。

4f121f7a756bed7e73ff44e089936dd2.png

Envoy 的局限性

需要应用程序的参与

由于 Envoy 无法自动转发追踪上下文,应用程序本身需要负责将入站请求的 Headers 复制到出站请求中,以保持追踪信息的完整性。

应用程序复制 Headers

应用程序在处理入站请求时,需要将必要的 Headers(如关联 ID、用户身份等)复制到任何出站请求中。

141d32b9a59c97e93aa290736f66f109.png

应用程序复制 Headers

响应返回给用户

应用程序完成对用户请求的处理后,将响应返回给用户。

c494df3ff284f9e6a5e5cd285eb06bdf.png

响应返回给用户

解决方案与推荐

为了确保追踪信息的完整性,应用程序需要主动复制和传递追踪相关的 Headers。这可以通过集成如 Apache SkyWalking[1] 的工具来实现,SkyWalking 不仅支持分布式追踪,还包括性能监控、日志分析等功能。利用 SkyWalking 的库和代理,可以简化 Headers 的复制和追踪信息的传递。

关于如何在 Istio 中使用 SkyWalking 实现分布式追踪详见这篇博客 [2]。

总结

  • • 追踪的重要性:追踪为开发人员提供了用户请求的完整上下文,帮助更好地理解和改进用户体验。

  • • Envoy 的局限性:Envoy 只能看到网络层面的请求和响应,无法跟踪请求的因果关系,因此无法自动转发追踪上下文。

  • • 应用程序的角色:应用程序需要主动复制和传递追踪相关的 Headers,以确保追踪信息的完整性。

  • • 推荐的工具:使用 SkyWalking 等追踪工具的库,可以简化在应用程序中实现 Headers 复制的过程。

参考

  • • How the Envoy proxy handles a user request - tetrate.io[3]

  • • 如何在 Istio 中使用 SkyWalking 进行分布式追踪?- jimmysong.io[4]


引用链接

[1] Apache SkyWalking: https://skywalking.apache.org/
[2] 这篇博客: https://jimmysong.io/blog/distributed-tracing-with-skywalking-in-istio/
[3] How the Envoy proxy handles a user request - tetrate.io: https://tetrate.io/blog/how-the-envoy-proxy-handles-a-user-request/
[4] 如何在 Istio 中使用 SkyWalking 进行分布式追踪?- jimmysong.io: https://jimmysong.io/blog/distributed-tracing-with-skywalking-in-istio/

获取更多云原生社区资讯,加入微信群,请加入云原生社区,点击阅读原文了解更多。

Apache SkyWalking 是一个开源的应用性能监控和观测平台,它支持分布式系统、微服务架构和容器化环境的性能监控。通过监控系统的请求流和调用链,它可以帮助开发者和运维人员快速定位和解决性能问题,提高应用的稳定性和可靠性。 《Apache SkyWalking实战PDF》是一本关于使用 Apache SkyWalking 进行应用性能监控实践的电子书。该书通过详细介绍 SkyWalking 的工作原理、部署和配置方法,以及如何使用 SkyWalking 进行性能监控和问题排查,帮助读者全面了解和掌握 SkyWalking的使用技巧。 《Apache SkyWalking实战PDF》主要包括以下内容: 1. Apache SkyWalking 的概述和特性:介绍了 SkyWalking 的基本原理和功能,包括请求追踪、性能指标监控、告警和日志分析等。 2. SkyWalking 的部署和配置:详细介绍了如何在各种环境下(包括单机和分布式环境)部署和配置 SkyWalking,包括安装和运行 SkyWalking 服务器和探针。 3. 实践案例和示例:通过实际的案例和示例,展示了如何使用 SkyWalking 进行性能监控和问题排查。包括如何分析请求的调用链、如何根据性能指标进行优化、如何发现和解决性能瓶颈等。 4. SkyWalking 的进阶内容:介绍了 SkyWalking 的高级功能和扩展,如分布式追踪、服务拓扑图、故障定位和容量规划等。 通过阅读《Apache SkyWalking实战PDF》,读者可以了解如何快速搭建和使用 SkyWalking 进行应用性能监控,提高应用的性能和可靠性,解决和预防性能问题。这对于开发者、运维人员和系统架构师来说都是一本实用的参考书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值