开源 APM 性能检测系统与架构
(一)APM 基础篇
-
介绍 APM 的定义、核心思想和作用。
APM,全称 Application Performance Management,是一种应用性能监控工具。目前市面的系统基本都是参考 Google 的 Dapper(大规模分布式系统的跟踪系统)来做的。APM 通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。其核心思想是在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。APM 的作用主要体现在以下几个方面:首先,它可以帮助开发团队快速定位应用系统性能故障,如发生 Oracle 数据库死锁等问题;其次,它能优化系统性能,精确分析系统各个组件占用系统资源情况,提出专家建议,保证应用在整个寿命周期内使用的系统资源要求最少,节约 TCO;最后,它可以覆盖终端用户体验、应用架构映射、应用事务的分析、深度应用诊断和数据分析等五个层次的实现,确保软件应用程序的良好运行,提高企业应用的可靠性和质量,保证用户得到良好的服务。 -
阐述为什么要用 APM,以及 APM 在性能测试中的优势。
有业务痛点,才要寻求解决方案。APM 需要优先解决测试环境下两个场景问题,基于测试先行的原则考虑。优先关注宏观数据,并不是说测试人员无须关注微观层面的问题,在测试角度来看,先解决性能测试环境的数据采样、收集问题,再去评估生产环境,而线上的链路监控需要研发跟运维去配合。APM 工具与传统的性能监控工具的区别在于,不仅仅提供一些零散的资源监控点和指标,其主要关注在系统内部执行、系统间调用的性能瓶颈分析,这样更有利于定位到问题的具体原因。在性能测试中,APM 可以执行性能基准测试,包括负载测试、压力测试、容量规划等,以测试应用程序的性能和可扩展性,确定应用程序的性能指标和极限。同时,APM 可以实时监测应用程序的性能指标,包括响应时间、负载、吞吐量、错误率等,以及时发现应用程序的性能问题,并通过分析工具对性能指标进行分析和优化。此外,APM 还可以对用户的交易行为和路径进行跟踪和分析,以便了解用户体验和行为特征,并优化应用程序的性能和效率。 -
列举市面上常见的 APM 工具,如 Pinpoint、SkyWalking、Zipkin 和 CAT 等。
近年来 APM 技术和市场得到了快速发展,相关产品如雨后春笋般大量涌现出来。常见的开源 APM 工具主要有 Pinpoint、SkyWalking、Zipkin 和 CAT 等。
- Pinpoint:Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java。它是一个韩国团队开源出来的,通过 JavaAgent 的机制来做字节码代码植入,实现加入 traceid 和抓取性能数据的目的。
- SkyWalking:SkyWalking is a distributed tracing system, and APM (Application Performance Monitoring)。它是国内一位叫吴晟的兄弟开源的,也是一个对 JAVA 分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。
- Zipkin:Zipkin is a distributed tracing system。它是 twitter 开源出来的,也是参考 Dapper 的体系来做的。Java 应用端是通过一个叫 Brave 的组件来实现对应用内部的性能分析数据采集。
- CAT:CAT 基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控。它是大众点评开源出来的,实现的功能也还是蛮丰富的,国内也有一些公司在用了。不过它实现跟踪的手段,是要在代码里硬编码写一些 “埋点”,也就是侵入式的。
(二)APM 与性能测试架构的结合
APM 技术可以通过以下方式帮助解决分布式架构带来的监控和运维挑战,为性能测试架构提供支持。首先,APM 可以实时监测分布式应用程序的性能指标,包括响应时间、负载、吞吐量、错误率等,以及时发现应用程序的性能问题。其次,APM 可以对微服务架构的应用程序进行性能监测,包括微服务的调用关系、性能指标、错误率等,以便及时发现和解决微服务的性能问题。此外,APM 可以对分布式和微服务架构的应用程序进行交易跟踪和分析,以了解用户的交易行为和路径,以便优化用户体验和提高用户满意度。最后,APM 可以通过分布式故障排查和诊断工具,快速定位和解决分布式应用程序的故障和异常,以提高应用程序的可用性和可靠性。同时,APM 可以对微服务架构的应用程序进行调用分析和优化,包括微服务的调用频率、响应时间、错误率等,以提高微服务的性能和效率。