【SkyWalking从入门到精通】第05篇:SkyWalking凭啥比Pinpoint快——性能优势的深层原因 上一篇【第004篇】SkyWalking的三大设计哲学——面向协议、模块化、轻量化下一篇【第06篇】JavaAgent原理——SkyWalking无侵入探针的魔法秘密明日更新敬请期待摘要在APM领域Pinpoint曾经是GitHub Star数最多的开源项目直到2019年被SkyWalking超越。两者功能看起来相似但性能差距却非常显著。不是Pinpoint差而是两者的设计出发点完全不同Pinpoint为能用而设计SkyWalking为高并发生产环境稳定运行而设计。本篇从设计目标、技术选型到具体实现带你看清楚SkyWalking性能优势的本质。一、先把性能定义清楚谈性能必须先定义衡量维度否则对话会变成我们系统很快“快多少”“感觉快”对于APM探针来说性能维度有两个探针端性能损耗给业务系统加上APM后业务系统本身的性能下降了多少OAP端吞吐能力APM后端能处理多少TPS的监控数据SkyWalking的设计目标非常明确┌─────────────────────────────────────────────────────────────┐ │ SkyWalking 性能设计目标明文写在官方文档里 │ │ │ │ 探针端 │ │ 单进程 1万TPS 下支持 100% 采样 │ │ 业务系统性能损耗 10% │ │ │ │ OAP端 │ │ 常规处理能力百亿级别 │ │ 支持 15 个OAP节点处理 250个服务、每天3TB 监控数据 │ │ │ │ 这不是PPT指标是生产案例验证的数字 │ └─────────────────────────────────────────────────────────────┘1万TPS100%采样——这意味着什么意味着你的应用每秒处理1万个请求SkyWalking全量记录每一个请求的追踪链路对业务系统的性能影响不超过10%。这个指标在APM领域是非常高的标准。二、SkyWalking的性能优势来源优势1DataCarrier——异步非阻塞的内存队列探针在业务线程中收集数据后最关键的一步是怎么把数据发给OAP Server而不阻塞业务线程方案A差直接在业务线程里发送gRPC请求——业务线程会等待网络I/O完成严重影响业务响应时间。方案BSkyWalking实际用的使用DataCarrier内存队列业务线程只把数据写入内存队列纳秒级然后立刻返回。另有专门的发送线程池异步消费队列批量打包发送给OAP。┌─────────────────────────────────────────────────────────────┐ │ DataCarrier异步队列的工作流程 │ │ │ │ 业务线程 │ │ │ │ │ ├─ 处理HTTP请求主业务逻辑 │ │ │ │ │ ├─ SkyWalking拦截创建Span ←──── 极低开销纳秒级 │ │ │ │ │ ├─ Span写入DataCarrier内存队列 ←── 极低开销纳秒级 │ │ │ │ │ └─ 返回HTTP响应业务线程不等待数据发送 │ │ │ │ ↕ │ │ DataCarrier 内存队列 │ │ ↕ │ │ │ │ 发送线程独立线程池 │ │ ├─ 批量拉取队列中的Span数据 │ │ ├─ 序列化为Protocol Buffers格式 │ │ └─ 通过gRPC异步发送给OAP Server │ └─────────────────────────────────────────────────────────────┘这是SkyWalking探针低性能损耗的核心原因数据采集与数据传输完全异步解耦。优势2OAL轻量级流计算引擎接到探针上报的Trace数据后OAP需要聚合计算出各种指标平均响应时间、错误率等。Pinpoint的方案依赖HBase的强大存储和Scatter Chart等可视化但所有数据都存储后再查询实时性差而且HBase本身运维复杂。SkyWalking的方案自研OALObservability Analysis Language流式计算引擎数据在内存中实时聚合只把聚合结果持久化到存储。原始Trace数据流 每秒10,000条 TraceSegment Pinpoint方式 10,000条 → HBase存储 → 查询时聚合计算 → 慢 SkyWalking方式 10,000条 → 内存L1聚合 → 内存L2聚合 → 写入ES的是聚合结果 存储的数据量对比 Pinpoint所有原始数据 10,000条 SkyWalking聚合后的指标可能只有几十条这就是为什么SkyWalking在相同硬件下能处理更高吞吐量的根本原因。优势3不强制100%写入传统APM包括很多Pinpoint部署方案会把所有Trace数据持久化这带来了巨大的I/O压力。SkyWalking通过采样模型解决了这个问题指标数据Metrics100%采集并聚合因为存的是聚合结果量很小Trace明细数据支持可配置的采样率服务器端采样默认采样率可以设置慢请求/异常请求无论采样率如何总是100%记录这个策略的精妙之处在于你永远不会错过问题请求异常和慢请求全量记录但正常请求只采样部分大幅降低存储压力。三、Pinpoint vs SkyWalking架构对比深入看一下两者的技术选型差异┌─────────────────────────────────────────────────────────────────┐ │ 架构对比SkyWalking vs Pinpoint │ ├────────────────────┬──────────────────┬──────────────────────── │ │ 组件 │ SkyWalking │ Pinpoint │ ├────────────────────┼──────────────────┼──────────────────────── │ │ 探针异步机制 │ DataCarrier内存队列│ ThriftClient连接池 │ │ OAP/Collector处理 │ OAL流式内存聚合 │ Flink/HBase批量写入 │ │ 存储技术 │ ES/MySQL/TiDB │ HBase强依赖 │ │ 查询方式 │ GraphQL实时查询 │ MySQL HBase混合查询 │ │ 部署复杂度 │ 低 │ 高需要整套大数据栈 │ │ 1万TPS探针损耗 │ 10% │ 显著高于SkyWalking │ │ 最大规模案例 │ 250服务/3TB/天 │ 大规模但需大数据支持│ └────────────────────┴──────────────────┴──────────────────────── │Pinpoint并不差它的设计非常优秀也有很多成功案例。只是两者的技术路线选择不同Pinpoint“用大数据技术解决大数据问题”SkyWalking“不引入大数据问题从根本上控制数据量”四、真实生产案例250服务/3TB/天书中提到的这个案例非常有说服力背景某大型零售企业书中描述的案例规模服务数量250个微服务监控数据量每天产生3TB监控数据SkyWalking集群规模15个OAP节点15个节点处理250个服务每天3TB数据单节点处理约200GB/天这是很高的吞吐水平。对比一下这意味着什么如果用Pinpoint250GB每天的HBase存储增量意味着需要一个相当规模的HBase集群通常需要至少6个数据节点而且HBase的运维复杂度远高于Elasticsearch。SkyWalking通过流式聚合大幅压缩了存储数据量——那3TB原始数据经过OAL聚合后存储到Elasticsearch的实际数据量远小于3TB。五、100%采样的哲学大多数APM系统包括Zipkin、Jaeger的默认配置在高流量下会开启降采样只记录1/100或1/1000的请求。SkyWalking的立场非常鲜明在单进程1万TPS下支持100%采样。这背后的工程哲学是降采样的问题 你永远无法预知哪次请求会出问题 如果你只记录了1/100的请求 那么出问题的那1条请求有99%的概率没被记录 故障时你什么都查不到 SkyWalking的解决方案 通过极低的探针性能损耗实现生产环境100%采样 慢请求/异常请求无论如何100%保留 故障时总有数据可查当然100%采样对存储是挑战。SkyWalking通过服务器端采样来控制OAP层可以设置最终持久化的采样率过滤掉大量正常请求的Trace只保留有价值的样本。探针端采集100%存储端聪明地过滤。六、性能调优的两个关键参数对于关注性能的同学这里提前透露两个重要的参数探针端# 控制采样率100代表100%默认值 agent.sample_n_per_3_secs-1 # -1表示全量采样 # 控制上报的缓冲队列大小 collector.grpc_channel_check_interval30OAP端application.yamlreceiver-trace:default:sampleRate:${SW_TRACE_SAMPLE_RATE:10000}# 10000 100%采样slowDBAccessThreshold:${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100}通过sampleRate控制OAP存储的采样率数值范围0-1000010000代表100%。本篇小结SkyWalking的性能优势来自三个层面的设计探针端DataCarrier内存队列实现异步非阻塞业务线程不等待网络I/OOAP端OAL流式聚合在内存中完成存储的是聚合结果而非原始数据存储层服务器端采样 慢请求全量保留平衡存储成本和数据完整性这些设计使得SkyWalking能在单进程1万TPS下实现100%采样、性能损耗10%的目标并在生产环境中处理250服务/3TB/天的监控规模。下一篇我们深入JavaAgent机制——SkyWalking无侵入探针的魔法到底是怎么变出来的上一篇【第004篇】SkyWalking的三大设计哲学——面向协议、模块化、轻量化下一篇【第06篇】JavaAgent原理——SkyWalking无侵入探针的魔法秘密明日更新敬请期待

相关新闻

最新新闻

具身智能精密装配赛上位机开发:TCP通讯、协议解析与实时调度实战指南

具身智能精密装配赛上位机开发:TCP通讯、协议解析与实时调度实战指南

1. 先搞清楚“具身智能精密装配赛”到底要解决什么问题看到“具身智能精密装配赛”这个标题,很多人的第一反应可能是“这比赛要用机器人做装配”,然后就开始琢磨机械臂、视觉算法或者强化学习。但结合“线下赛区需要智能体上位机教学及tcp通讯”这个关键…

2026/8/26 0:00:17
缓存穿透、击穿与雪崩:原理、区别与Spring Boot+Redis实战解决方案

缓存穿透、击穿与雪崩:原理、区别与Spring Boot+Redis实战解决方案

大家好,我是专注于后端技术分享的博主。在构建高并发系统时,缓存是提升性能、保护数据库的利器。然而,如果使用不当,缓存也可能成为系统稳定性的“阿喀琉斯之踵”。缓存穿透、击穿和雪崩是三个高频出现且极易混淆的故障场景&#…

2026/8/26 0:00:17
免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

2026/8/26 0:00:17
Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

2026/8/26 0:00:17
Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:17
基于Hadoop大数据的微博舆情分析可视化系统(源码+lw+部署文档+讲解等)

基于Hadoop大数据的微博舆情分析可视化系统(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/25 23:55:17