一、认识分布式追踪
相比传统的"巨石"应用,微服务的一个主要变化是将应用中的不同模块拆分为了独立的进程。在微服务架构下,原来进程内的方法调用成为了跨进程的远程方法调用。相对于单一进程内的方法调用而言,跨进程调用的调试和故障分析是非常困难的,难以适应传统的代码调试程序或者日志打印来对分布式的调用过程进行查看和分析。

如上图右边所示,微服务架构中系统各个微服务之间存在复杂的调用关系。一个来自客户端的请求在其业务处理中经过了多个微服务进程。我们如果想要对该请求的端到端调用过程进行完整的分析,则必须将该请求经过的所有进程的相关信息都收集起来并关联在一起,这就是"分布式追踪"。
二、认识Jaeger
Jaeger是由Uber开源的分布式追踪系统,它采用Go语言编写,主要借鉴了Google Dapper论文和Zipkin的设计,兼容OpenTracing以及Zipkin追踪格式,目前已经成为CNCF基金会的开源项目。
Jaeger的相关术语:
Span:是Jaeger的逻辑工作单元,具有请求名称、请求开始时间、请求持续时间。Span会被嵌套并排序以展示服务间的关系。

Trace:是Jaeger在微服务系统中记录的完整的请求执行过程,并显示为Trace,Trace是系统的数据/执行路径,一个端到端的Trace由一个或者多个Span组成。
Envoy原生支持Jaeger,追踪所需x-b3开头的Header和x-request-id在不同的服务之间由业务逻辑进行传递,并由Envoy上报给Jaeger,最终Jaeger生成完整的追踪信息。

本文介绍了在微服务架构下,分布式追踪的重要性,特别是针对Istio环境中,Jaeger作为分布式追踪系统如何运作。Jaeger是Uber开源的系统,它记录完整的请求执行过程,通过Envoy Sidecar收集并上报追踪信息。文章详细阐述了Jaeger的主要组件,包括Client、Agent、Collector、Database和Query UI,并提供了运行Jaeger及查看链路跟踪、服务依赖和请求差异的步骤。
最低0.47元/天 解锁文章
2577

被折叠的 条评论
为什么被折叠?



