2021-07-12

文章目录

概述

PinPoint(naver–开源)

由Twitter公司开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。

字节码探针技术,代码无侵入,体系完善不易修改,支持java,技术栈支持dubbo.其他语言社区支援中;

Zipkin(Twitter–开源)

一款对Java编写的大规模分布式系统的APM工具,由韩国人开源的分布式跟踪组件,特点是支持多种插件,UI功能强大,接入端无代码侵入。

方便集成于spring cloud sleuth,社区支持的插件也包括dubbo,rabbit,mysql,httpclient等,同时支持php,go,js等语言客户端,界面功能较为简单,本身无告警功能,可能需要二次开发。代码入侵度小;

Skywalking(华为–开源)

是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。

类似于PinPoint,目前还在apache孵化中,网上吞吐量对比中强于pinpoint,实际未验证。本身支持dubbo;

对比

探针的性能

对 skywalking、zipkin、pinpoint 进行了压测,并与基线(未使用探针)的情况进行了对比。

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%。

pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

2021-07-12

结论

skywalking 的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint 的探针对吞吐量的影响较为明显

应用入侵性

zipkin

没有采用javaagent方式,应用强依赖ZipKin,必须打包到应用中与应用一起运行,每个项目需要添加依赖项、配置,不同探针有不同的bean配置需求;

skywalking

采用javaagent方式,普通功能对应用无侵入,以下两项功能需要应用稍作修改

1.中添加自定义Tag项:应用代码在SkyWalking Span中添加自定义Tag,可以按需输出方法参数值等关键信息,辅助应用排错和性能分析,PinPointZipKin都不支持(可自行实现);

2.日志中输出全局跟踪ID,需要添加SkyWalking依赖项;

pinpoint

采用javaagent方式,对应用完全无侵入,项目无需添加任何额外依赖项,无需修改代码,这点做得最好;

可扩展性

zipkin

开发 zipkin-Server(其实就是提供的开箱即用包),zipkin-agent 与 zipkin-Server 通过 http 或者 mq 进行通信,http 通信会对正常的访问造成影响,

所以还是推荐基于mq异步方式通信,zipkin-Server 通过订阅具体的 topic 进行消费。这个当然是可以扩展的,多个 zipkin-Server 实例进行异步消费 mq 中的监控信息

skywalking

skywalking的collector支持两种部署方式:单机和集群模式。collector与agent之间的通信使用了gRPC。

当你使用-javaagent参数激活sky-walking的探针, 如果当前上下文中存在traceid,logback将在输出traceId

如果探针没有被激活,将输出TID: N/A.而且SkyWalking是基于字节码增强的,traceId的传递依赖于SkyWalking的服务端,

如果服务端异常等客户端连接不上服务端的情况,就会出现TID: [Ignored Trace]的情况,就会丢失traceId。

pinpoint

pinpoint也是支持集群和单机部署的。pinpoint agent通过thrift通信框架,发送链路信息到collector。

界面展示

zipkin

2021-07-12

skywalking

2021-07-12

pinpoint

2021-07-12

2021-07-12

2021-07-12

2021-07-12

调用链应用拓扑

zipkin

2021-07-12

skywalking

2021-07-12

pingpoint

2021-07-12

JVM监控

2021-07-12

方案总结

方案 扩展性 实现方式 代码侵入性 性能损失 传输协议 客户端支持 存储
skywalking java探针字节码注入 部分侵入(生成TraceId) gRPC Java, .NET, PHP等 es,mysql,H2,TIDB
sleuth+zipkin 拦截请求 侵入(强依赖zipkin) Http,MQ java,c#,go,php等 es,mysql,cassandra,内存
pingpoint java探针字节码注入 无侵入 Thrift,gRPC java、php hbase+mysql
方案 颗粒度 调用链应用拓扑 UI丰富程度 告警支持 jvm监控 trace查询 全局调用统计
skywalking 方法级 服务+中间件 支持 支持 支持 支持
sleuth+zipkin 接口级 服务 不支持 不支持 支持 不支持
pingpoint 代码级 服务+中间件 支持 支持 支持 支持

** 借鉴自: https://blog.csdn.net/qq_34162294/article/details/118347401**

上一篇:Zipkin


下一篇:UML中聚合和复合聚合的区别