多语言(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
多语言(Java、.NET、Node.js)混合架构下开源调用链追踪APM项目初步选型的更多相关文章
- libnode 0.4.0 发布,C++ 语言版的 Node.js
libnode 0.4.0 支持 Windows ,提升了性能,libuv 更新到 0.10.17 版本,libj 更新到 0.8.2 版本. libnode 是 C++ 语言版的 Node.js,和 ...
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
前言 在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...
- Node.js npm基础安装配置&创建第一个VUE项目
使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...
- 关于Node.js后端架构的一点后知后觉
前言 上周有幸和淘宝前端团队的七念老师做了一些NodeJS方面上的交流(实际情况其实是他电话面试了我╮(╯-╰)╭),我们主要聊到了我参与维护的一个线上NodeJS服务,关于它的现状和当下的不足.他向 ...
- Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!
七夕如期而至,不该来的终究还是来了.再傲娇的单身贵族恐怕也难免在今天会感觉一丝丝的空虚.还好你关注了我,因为接下来我准备了三大招教你一个人…..也可以优雅地过七夕. 招式一:移形幻影,无中生有 七夕当 ...
- node.js express架构安装部署
安装-g:表示全局安装(必须以安装node.js) npm install -g express-generator 创建一个express架构的项目文件夹express testWebApp 在pa ...
- 手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)
前言 什么是APM?全称:Application Performance Management 可以参考这里: 现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体 ...
- node.js多进程架构
node.js是单进程应用,要充分利用多核cpu的性能,就需要用到多进程架构. 作为web服务器,不能多个进程创建不同的socket文件描述符去accept网络请求, 有经验的同学知道,如果端口被占用 ...
- node.js之windows下环境终极配置
大家都知道现在node.js相当流行,出门在外,如果都没听说过node.js,基本上算是out了,前段时间做一个项目,用到了实时通讯功能,当时用的就是node.js来做的,我有幸有研究了一番,别的不敢 ...
随机推荐
- 【Python全栈-数据库】数据库基础
数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...
- python QT 编程之路
pyQT4 的Wheel 下载 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4 python发送GET 或者 POST请求 https://www ...
- mysql之show engine innodb status解读(转)
add by zhj: 我第一次知道这个命令是线上服务出了问题,然后同事用这个命令去查看死锁.但用这个命令看死锁有一定的局限性,它只能看到最后一次死锁, 而且只能看到死锁环中的两个事务所执行的最后一条 ...
- jquery有几种选择器?
①.基本选择器:#id,class,element,*: ②.层次选择器:parent > child,prev + next,prev ~ siblings: ③.基本过滤器选择器::firs ...
- DNS搜索
dig(Domain Information Groper) dig @dnsserver name querytype 如果你设置的dnsserver是一个域名,那么dig会首先通过默认的上连DNS ...
- Python操作rabbitmq消息队列持久化
消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...
- 前端 HTML body标签相关内容 常用标签 表单标签 form里面的 label标签介绍
定义:<label> 标签为 input 元素定义标注(标记). label标签功能:关联input标签文本与表达元素,点击input标签文本时,如同点击表单元素一样. label标签是行 ...
- 终极大招——Scrapy框架
Scrapy框架 Scrapy 是一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途 ...
- java poi导入Excel(个人代码)
案例使用的框架:jsp+spring+mybaties <form id="importForm" name="importForm" method=&q ...
- 银联卡中关于CVN/CVN2/ICVN的区别
银联China Union Pay,是中国唯一合法的卡组织机构,同时也是EMVCo成员.关于银联卡中CVN/CVN2/ICVN的区别,刚开始我自己不了解,但经过查找资料和请教其他人,对它们的概念也渐渐 ...