APM工具对比

2022-03-20  本文已影响0人  fengzhihai

一、apm介绍

随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂:

如何串联整个调用链路,快速定位问题?
如何澄清各个微服务之间的依赖关系?
如何进行各个微服务接口的性能分析?
如何追踪各个业务流程的调用处理顺序?

因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是APM系统,全称:Application Performance Management tools,AMP最早是谷歌公开的论文提到的 Google Dapper。其后越来越多的apm或类apm工具出现在人们眼前,在此,我将一些主流的工具进行对比。

注:此文章有引用别处文章,先汇总如下,大家也可以作为参考:
https://zhuanlan.zhihu.com/p/60436915?utm_source=wechat_session

二、对比

2.1、基本信息

 以下信息的统计时间为2022-03-20 15:30
# github
1、pinpoint
# Pinpoint专注于链路和性能监控,韩国研发团队开源,埋点无侵入,UI功能较强。
https://github.com/pinpoint-apm/pinpoint
2、skywalking
# Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为。Skywalking专注于链路和性能监控,埋点无侵入,UI功能较强。能够加入Apache孵化器,设计思想及代码得到一定认可,后期应该也会有更多的发展空间及研发人员投入。目前使用厂商最多。版本更新较快。
https://github.com/apache/skywalking
3、zipkin
# Zipkin由Twitter开源,调用链分析工具,基于spring-cloud-sleuth得到广泛使用,非常轻量,使用部署简单。
https://github.com/openzipkin/zipkin
4、cat
# CAT是一个更综合性的平台,提供的监控功能最全面,国内几个大厂生产也都在使用。但研发进度及版本更新相对较慢。
https://github.com/dianping/cat
名称 用途 研发者 github star
pinpoint 分布式链路追踪系统、APM naver 12.1k
skywalking 分布式链路追踪系统、APM 2017年加入Apache孵化器 18.9k
zipkin 分布式链路追踪系统 Twitter 15.2k
cat 应用实时监控 携程、大众店品 16.5k

2.2、埋点方式

名称 埋点方式 入侵性
pinpoint java探针
skywalking java探针
zipkin http拦截器
cat 代码埋点(拦截器/注解/过滤器)

2.3、埋点数据传输性能

名称 数据采集 消息传输 业务吞吐量影响 cpu及mem影响
pinpoint 系统层:cpu/mem/disk/load;应用层:jvm/链路/调用关系/执行耗时,业务层: thrift 中高 <10%
skywalking 同pinpoint grpc <10%
zipkin 系统层:无,应用层:链路追踪,执行耗时,业务层:无 消息队列/http 10%
cat 系统层:cpu/mem/disk/load;应用层:jvm/链路/调用关系/执行耗时,业务层:业务kpi数据(手动埋点) netty 10%
除了zipkin采集数据较单一,其他组件采集数据差不多
网络传输上消息队列应该优于其他,因为在大数据量场景下,消息中间件能够缓冲客户端与服务端吞吐量不平衡的情况,同时实时数据的分流处理,共享更灵活。其他方式要么将数据持久化到本地,要么占用大量内存,要么直接丢弃。
性能影响上Pinpoint相对于其他相对更大
cpu和mem影响都在10%的可接受范围内

2.4、数据存储

名称 存储方式
pinpoint hbase
skywalking es/mysql/tidb/h2/sharding sphere
zipkin mysql/es/cassandra
cat 本地/hdfs/mysql
CAT的数据存储选型较落后,无法适应目前大数据量的查询,特别是一些精确查询
Pinpoint选择Hbase存储,局限于Hbase基于rowkey查询的限制,对于非rowkey字段的查询不支持
目前看来Elasticsearch是作为实时查询,时序查询比较好的一个选择,时间较长的重要历史数据可考虑同步到hive中。同时支持Elasticsearch作为数据源的开源报表工具也很多,如kibana,grafana等

2.5、架构设计

2.5.1、pinpoint

官网:
https://pinpoint-apm.gitbook.io/pinpoint/want-a-quick-tour/overview
pinpoint architecture

2.5.2、skywalking

https://skywalking.apache.org/docs/main/latest/en/concepts-and-designs/overview/
skywalking architecture 官网
skywalking architecture 知乎

2.5.3、zipkin

官网:
https://zipkin.io/pages/architecture.html
zipkin architecture 官网
zipkin architecture 知乎

2.5.4、cat

cat architecture 知乎
采集端,CAT和Zipkin直接嵌入项目或框架,CAT需要机器特定目录下额外的配置文件,Skywalking和Pinpoint也需要在机器实现在机器目录下由agent的jar包,如果后面通过容器发布,可以文件打入镜像中,需要使用的业务方直接在Dockerfile中使用相应的镜像,并配置-javaagent启动参数即可。
CAT和Skywalking都在数据存储之前提供了分析,预聚合功能,用于提升后续页面查询的效率,Pinpoint的页面功能基本都是基于原始数据进行分析,因此在数据量较大时页面展示会出现加载非常慢的情况。
CAT生产部署要求极其配置较高,堆大小至少10G以上
上一篇下一篇

猜你喜欢

热点阅读