多语言(Java、.NET、Node.js)混合架构下开源调用链追踪APM项目初步选型

1. 背景

我们的技术栈包括了Java、.NET、Node.js等,并且采用了分布式的技术架构,系统性能管理、问题排查成本越来越高。

2. 基本诉求

针对我们的情况,这里列出了选型的主要条件,作为最终判断依据

基本条件:

  • 多平台探针(Java、.NET Core、Node.js)
  • 无侵入的探针部署方式
  • 探针对应用性能和高可用影响小
  • 服务端高可用,服务端不可用时,客户端无影响

3. 主要选项

主流的调用链追踪项目有Pinpoint、Zipkin、Skywalking、CAT

3.1. Pinpoint

Pinpoint是韩国人开源,项目活跃度比较高,web端功能比较健全,包括应用调用关系拓扑图、请求调用链、应用性能状态查看等,探针支持Java和PHP。

项目地址 https://github.com/naver/pinpoint

3.2. Zipkin

Zipkin是Twitter开源的调用链分析工具,特点是轻量,使用部署简单,另外优势是探针支持的语言平台比较丰富。

项目地址 https://github.com/openzipkin/zipkin

3.3. Skywalking

SkyWalking是本土开源的调用链分析、以及应用监控分析工具。已加入Apache孵化器,特点是支持多种语言的探针(Java、.NET Core、NodeJS、PHP),探针支持的组件也非常丰富,UI功能较强,接入端无代码侵入,兼容Zipkin和Istio telemetry格式。

项目地址 https://github.com/apache/incubator-skywalking

3.4. CAT (Central Application Tracking)

CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

项目地址 https://github.com/dianping/cat

4. 特性对比

特性 Pinpoint Zipkin Skywalking CAT
存储方式 Hbase Cassandra、ES、MySQL、InMemory ES、H2、MySQL、TiDB MySQL、Hadoop
部署依赖   zookeeper、consul、Kubernetes Tomcat
数据协议 thrift HTTP、MQ gRPC TCP
数据采样
探针方式 无侵入 侵入式 无侵入 侵入式
探针平台 Java、PHP Java、.NET Core、Go、PHP、Ruby、Js Java、.NET Core、Go、PHP、Node.js Java、C、C++、Python、Go、Node.js
OpenTracing 不支持 支持 支持 不支持
STAR数 8049 10407 5838 8038
近1月提交人数 9 3 13 6
近1月提交数 91 25 78 20

PS: 社区活跃度数据截至2019.02.15,仅供参考,并不能代表实际的活跃度。

5. 性能对比

参考文章《调用链选型之Zipkin,Pinpoint,SkyWalking,CAT》https://www.jianshu.com/p/0fbbf99a236e,Skywalking的Java探针对应用的性能影响最小,关于其它平台上的探针后续将做测试。

6. 初步结论

Zipkin积累的STAR数最多,Skywalking由于项目成立较晚,STAR数最少。近期的社区活跃度方面Pinpoint和Skywalking热度最高。

由于Pinpoint和CAT目前不支持 .NET Core 的探针直接排除,Zipkin和Skywalking的探针集成方式上对比,Skywalking的无侵入方式有很大的优势。

另外Skywaling为国人主导的项目,国人参与度非常高,沟通方面有一定的优势。

后续我们将针对Skywalking进行下面几点的测试:

  • 服务端高可用性
  • 服务端数据容量增长对性能的影响
  • 服务端不可用时对不同平台客户端的影响
  • 不同平台探针对应用的性能影响

7. 参考资料

调用链选型之Zipkin,Pinpoint,SkyWalking,CAT https://www.jianshu.com/p/0fbbf99a236e

全链路监控(一):方案概述与比较 https://juejin.im/post/5a7a9e0af265da4e914b46f1

探针性能揭秘 https://github.com/SkyAPMTest/Agent-Benchmarks/blob/master/README_zh.md

上一篇:react native 项目使用 expo 二维码扫描失败


下一篇:linux应用程序地址布局