全链路跟踪——Zipkin、Pinpoint、SkyWalking、CAT、jaeger(一)

本文比较了Zipkin、Pinpoint、Skywalking、CAT和Jaeger这五个开源调用链分析工具的实现方式、支持的语言、接入方式、性能表现,发现Skywalking对吞吐量影响最小,Pinpoint影响较大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

  • Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  • Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  • skywalking是一款国产开源框架,为分布式系统的应用程序性能监控工具,特别为微服务、云原生和基于容器(Kubernetes)架构而设计,基于OpenTracing规范、开源的AMP系统。Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。支持Java, .Net Core, PHP, NodeJS, Golang, LUA语言探针。
  • CAT(Central Application Tracking)是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
  • jaeger 受到Dapper和OpenZipkin的启发,是由Uber Technologies创建 并捐赠给Cloud Native Computing Foundation的分布式追踪平台。

对比

项目ZipkinPinpointSkywalkingCATjaeger
实现方式拦截请求Java探针,
字节码增强
Java探针,
字节码增强
代码埋点拦截请求
支持语言JavaJavaJava/C/C++/Go/Nginx等Java/C/C++/Go/Node.jsGo
接入方式基于linkerd或者sleuth方式,
引入配置即可
javaagent字节码javaagent字节码代码侵入拦截/侵入
agent到collector的协议http,MQthriftgRPChttp/tcpudp/http
OpenTracing××
颗粒度接口级方法级方法级代码级接口级
全局调用统计××
traceid查询××
报警××
JVM监控×××
数据存储ES/mysql/Cassandra/内存HbaseES/H2/PG/MySQLmysql,hdfsES/kafka/Cassandra,内存
STAR16.3k12.9k22.2k18k18.1k

性能

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

在这里插入图片描述
从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

转载:
https://blog.csdn.net/A123638/article/details/123117142
https://juejin.im/post/5a7a9e0af265da4e914b46f1

### 分布式链路追踪框架概述 分布式链路追踪技术是种用于监控和诊断分布式系统的工具,它可以帮助开发者理解请求在不同服务之间的流动情况以及定位潜在的性能瓶颈或错误。这种技术对于微服务架构尤为重要,因为单个用户的请求可能涉及多个独立部署的服务实例。 #### 核心概念与原理 分布式链路追踪的核心在于通过唯标识符(Trace ID 和 Span ID)将次完整的请求分解成若干子操作(Span),并记录这些操作的时间戳、状态和其他元数据。每个 Span 可能会进步拆分为更细粒度的操作,形成树状结构[^3]。这种方式使得整个调用链条清晰可见,便于后续分析和服务治理。 以下是几个重要术语定义: - **Trace**: 表示个端到端的完整请求路径。 - **Span**: 是 Trace 的基本单元,代表某个具体操作的行为及其上下文信息。 - **Parent/Child Relationship**: Spans 之间可能存在父子关系,表示它们执行顺序上的依赖性。 #### 主流框架推荐及特点比较 1. **Zipkin** Zipkin 是由 Twitter 开源的款流行的分布式追踪系统,支持多种编程语言客户端接入。它的设计简单易懂,适合初学者快速上手。主要功能包括收集延迟数据、可视化展示调用链路图等[^2]。 2. **Jaeger** Jaeger 同样是个强大的开源解决方案,最初由 Uber 发起维护。相比 Zipkin 更加现代化,在扩展性和灵活性上有显著提升。除了基础的功能外还提供了 API 查询接口方便二次开发定制化需求。 3. **SkyWalking** Apache SkyWalking 则是国内非常活跃的个项目,专注于 APM(Application Performance Management),不仅限于单纯的 trace 功能还包括 metric 收集等功能模块集成体。其优势体现在对中国市场的适配程度高,社区贡献者众多[^4]。 4. **Pinpoint** Pinpoint 是另个值得关注的选择,尤其适用于基于 Java 技术栈构建的应用程序环境之中。无需修改业务逻辑即可完成自动化的探针植入工作流程简化了很多复杂场景下的配置过程。 #### 自建 vs 使用现有方案考量因素 当考虑是否要采用已有的成熟产品还是自行研发专属版本时需权衡多方面要素比如团队技术水平现状、预算成本限制条件还有长远规划目标等因素综合评判后再做决定。 ```java // 示例代码片段展示了如何利用 OpenTelemetry SDK 创建 span 并将其关联至当前线程中的全局 tracer 对象。 import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; public class TracerExample { public static void main(String[] args){ Context parentContext = ... ; // 获取父级 context 或初始化个新的根节点 try (Scope scope = tracer.spanBuilder("exampleOperation").startScopedSpan()) { Span activeSpan = tracer.getCurrentSpan(); doWork(activeSpan); activeSpan.setAttribute("key", "value"); } } private static void doWork(Span span){...} } ``` 上述例子演示了借助 OpenTelemetry 库实现手动埋点的过程,这是目前较为通用的做法之可用于大多数主流语言环境中[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值