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

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

  1. libnode 0.4.0 发布,C++ 语言版的 Node.js

    libnode 0.4.0 支持 Windows ,提升了性能,libuv 更新到 0.10.17 版本,libj 更新到 0.8.2 版本. libnode 是 C++ 语言版的 Node.js,和 ...

  2. java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  3. Node.js npm基础安装配置&创建第一个VUE项目

    使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...

  4. 关于Node.js后端架构的一点后知后觉

    前言 上周有幸和淘宝前端团队的七念老师做了一些NodeJS方面上的交流(实际情况其实是他电话面试了我╮(╯-╰)╭),我们主要聊到了我参与维护的一个线上NodeJS服务,关于它的现状和当下的不足.他向 ...

  5. Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!

    七夕如期而至,不该来的终究还是来了.再傲娇的单身贵族恐怕也难免在今天会感觉一丝丝的空虚.还好你关注了我,因为接下来我准备了三大招教你一个人…..也可以优雅地过七夕. 招式一:移形幻影,无中生有 七夕当 ...

  6. node.js express架构安装部署

    安装-g:表示全局安装(必须以安装node.js) npm install -g express-generator 创建一个express架构的项目文件夹express testWebApp 在pa ...

  7. 手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

    前言 什么是APM?全称:Application Performance Management 可以参考这里: 现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体 ...

  8. node.js多进程架构

    node.js是单进程应用,要充分利用多核cpu的性能,就需要用到多进程架构. 作为web服务器,不能多个进程创建不同的socket文件描述符去accept网络请求, 有经验的同学知道,如果端口被占用 ...

  9. node.js之windows下环境终极配置

    大家都知道现在node.js相当流行,出门在外,如果都没听说过node.js,基本上算是out了,前段时间做一个项目,用到了实时通讯功能,当时用的就是node.js来做的,我有幸有研究了一番,别的不敢 ...

随机推荐

  1. 【Python全栈-数据库】数据库基础

    数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...

  2. python QT 编程之路

    pyQT4  的Wheel 下载 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4 python发送GET 或者 POST请求 https://www ...

  3. mysql之show engine innodb status解读(转)

    add by zhj: 我第一次知道这个命令是线上服务出了问题,然后同事用这个命令去查看死锁.但用这个命令看死锁有一定的局限性,它只能看到最后一次死锁, 而且只能看到死锁环中的两个事务所执行的最后一条 ...

  4. jquery有几种选择器?

    ①.基本选择器:#id,class,element,*: ②.层次选择器:parent > child,prev + next,prev ~ siblings: ③.基本过滤器选择器::firs ...

  5. DNS搜索

    dig(Domain Information Groper) dig @dnsserver name querytype 如果你设置的dnsserver是一个域名,那么dig会首先通过默认的上连DNS ...

  6. Python操作rabbitmq消息队列持久化

    消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...

  7. 前端 HTML body标签相关内容 常用标签 表单标签 form里面的 label标签介绍

    定义:<label> 标签为 input 元素定义标注(标记). label标签功能:关联input标签文本与表达元素,点击input标签文本时,如同点击表单元素一样. label标签是行 ...

  8. 终极大招——Scrapy框架

    Scrapy框架 Scrapy 是一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途 ...

  9. java poi导入Excel(个人代码)

    案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...

  10. 银联卡中关于CVN/CVN2/ICVN的区别

    银联China Union Pay,是中国唯一合法的卡组织机构,同时也是EMVCo成员.关于银联卡中CVN/CVN2/ICVN的区别,刚开始我自己不了解,但经过查找资料和请教其他人,对它们的概念也渐渐 ...