# 分布式链路追踪

# 为什么需要分布式链路追踪
在微服务和分布式架构中,一个用户请求可能会跨越多个服务、数据库或消息队列。为了看清请求的完整流转路径并快速定位性能瓶颈,分布式链路追踪组件成为了不可或缺的工具
常用的分布式链路追踪组件如下
| 组件名称 | 开发语言 | 接入方式 | 业务代码损耗 | 适用生态 / 场景 |
|---|---|---|---|---|
| SkyWalking | Java | 探针(无侵入) | 中等 | Java为主的多语言微服务、需要一站式APM |
| Jaeger | Go | SDK / 自动插桩 | 极低 | Go/云原生、K8s、Service Mesh (Envoy) |
| Zipkin | Java | 拦截器 / SDK | 低 | 传统的 Spring Cloud 老微服务系统 |
| Pinpoint | Java | 探针(无侵入) | 较高 | 线下性能调优、对代码级耗时要求极高的Java系统 |
# Apache SkyWalking
有多种上报方式,目前最主流的是Agent的方式。针对不同的框架,传输链路的方式也有所不同
dubbo:使用 Filter 和 RpcContext 来传输
spring cloud:使用 HTTP Header 来传输
# Zipkin
Spring Cloud Sleuth,专为 Spring Boot / Spring Cloud 微服务设计的链路追踪组件,最主流、开箱即用,我们一般只需要引入依赖+简单配置即可。但是这种方式仅支持Spring 技术栈
在Spring Cloud Sleuth中使用Zipkin时,是通过HTTP Header来传输链路的