Zipkin,Pinpoint,SkyWalking三种服务链路监控组件分析
简要说明:
SkyWalking
本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。采用java探针,字节码增强的基本原理
Zipkin
twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。可进行多种存储方式进行支持,并且可进行扩展开发,制定对应监控的服务链路以及采样率。采用拦截请求,发送(HTTP,mq)数据至zipkin服务。
Pinpoint
韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。采用ava探针,字节码增强的基本原理
接入方式:
类别 | Zipkin | Pinpoint | SkyWalking |
---|---|---|---|
接入方式 | 基于linkerd或者sleuth方式,引入配置即可 | javaagent字节码 | javaagent字节码 |
agent到collector的协议 | http,MQ | thrift | gRPC |
OpenTracing | √ | × | √ |
使用情况分析:
类别 | Zipkin | Pinpoint | SkyWalking |
---|---|---|---|
颗粒度 | 接口级 | 方法级 | 方法级 |
全局调用统计 | × | √ | √ |
traceid查询 | √ | × | √ |
报警 | × | √ | √ |
JVM监控 | × | × | √ |
应用展示友好度分析:
类别 | Zipkin | Pinpoint | SkyWalking |
---|---|---|---|
友好与详细程度 |
功能简单,但是清晰, 可完成基本链路监视功能 |
功能丰富,应用清晰 链路监控能力丰富 |
功能比较丰富,应用清晰 完整的链路监控能力 |
存储支持:
Zipkin:ES,mysql,Cassandra,内存
Pinpoint:Hbase
SkyWalking:ES,H2
PinPoint和skyWalking支持的插件对比
类别 | Pinpoint | SkyWalking |
---|---|---|
web容器 | Tomcat6/7/8,Resin,Jetty,JBoss,Websphere | Tomcat7/8/9,Resin,Jetty |
JDBC | Oracle,mysql | Oracle,mysql,Sharding-JDBC |
消息中间件 | ActiveMQ, RabbitMQ | RocketMQ 4.x,Kafka |
日志 | log4j, Logback | log4j,log4j2, Logback |
HTTP库 | Apache HTTP Client, GoogleHttpClient, OkHttpClient | Apache HTTP Client, OkHttpClient,Feign |
Spring体系 | spring,springboot | spring,springboot,eureka,hystrix |
RPC框架 | Dubbo,Thrift | Dubbo,Motan,gRPC,ServiceComb |
NOSQL | Memcached, Redis, CASSANDRA | Memcached, Redis |
性能分析:
摘自:https://juejin.im/post/5a7a9e0af265da4e914b46f1
以上三种全链路监控方案需要对比的项提炼出来:
-
探针的性能
主要是agent对服务的吞吐量、CPU和内存的影响。微服务的规模和动态性使得数据收集的成本大幅度提高。
-
collector的可扩展性
能够水平扩展以便支持大规模服务器集群。
-
全面的调用链路数据分析
提供代码级别的可见性以便轻松定位失败点和瓶颈。
-
对于开发透明,容易开关
添加新功能而无需修改代码,容易启用或者禁用。
-
完整的调用链应用拓扑
自动检测应用拓扑,帮助你搞清楚应用的架构
比较关注探针的性能,毕竟APM定位还是工具,如果启用了链路监控组建后,直接导致吞吐量降低过半,那也是不能接受的。对skywalking、zipkin、pinpoint进行了压测,并与基线(未使用探针)的情况进行了对比。
选用了一个常见的基于Spring的应用程序,他包含Spring Boot, Spring MVC,redis客户端,mysql。 监控这个应用程序,每个trace,探针会抓取5个span(1 Tomcat, 1 SpringMVC, 2 Jedis, 1 Mysql)。这边基本和 skywalkingtest 的测试应用差不多。
模拟了三种并发用户: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%之内。