一. 定义:
APM(Application Performance Management)应用性能管理,是可以帮助理解系统行为、用于分析性能问题的工具;目的是通过各种探针采集数据,收集关键指标同时搭配数据呈现以实时对应用程序性能管理和故障管理的系统化解决方案。
主要包含三个方面的内容,分别是日志logs,链路追踪traces,报表统计metrics
目前主流的APM框架都会包含下列几个组件来完成链路信息的收集和展示:
- 探针(Agent):负责在客户端程序运行时搜索服务调用链路信息,发给收集器
- 收集器(Collector):负责将数据格式化,保存到存储器
- 存储器(Storage): 保存数据
- UI界面(WebUI):统计并展示收集到的信息
二. APM筛选标准
因此,要筛选一款合格的APM框架,就是对比以上各个组件的使用差异
-
探针的性能:主要是agent对服务的吞吐量、CPU和内存的影响\
-
collector可扩展性: 水平扩展能力
-
调用链路数据分析: 数据分析速度尽量快、分析维度尽量多
-
开发透明,易于开关: 尽量减少对业务代码的入侵
-
完整的调用链应用拓扑
三. 主流产品对比
目前比较常见的APM框架大概有以下几种,大都是参考Google的Dapper实现的,分别是:
-
Zipkin:由Twitter公司开发并开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现
-
Pinpoint:韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大
-
Skywalking:国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃,中文文档没有语言障碍
-
CAT: 是由美团点评开源的,基于JAVA语言开发,目前提供JAVA,C/C++,Node.js,Python,Go等语言的客户端,监控数据全量统计,但其对代码的侵入性较强\
对比项 Zipkin Pinpoint Skywalking 探针性能 中 低 高 collector扩展性 高 中 高 调用链路数据分析 低 高 中 对开发透明性 中 高 高 调用链路拓扑 中 高 中 社区支持 高 中 高 Zipkin的探针性能、开发透明性、数据分析能力都不占优,实在是下下之选。
Pinpoint在数据分析能力、开发透明性上有较大的优势,不过Pinpoint的部署相对比较复杂,需要的硬件资源较高。
Skywalking的探针性能和开发透明性上具有较大优势,数据分析能力上也还不错,而且其部署比较方便灵活,比起Pinpoint更适合中小型企业使用。