现代应用性能管理深度概览

  • Steven Haines
  • 王丽娟

2008 年 9 月 3 日

话题:DevOps架构文化 & 方法

ADP 的高级技术架构师 Nicholas Whitehead 在 IBM developerWorks 上发表了由三部分组成的文章系列,题为Java 运行时监控。在该系列文章中,他给读者介绍了应用性能管理(APM):

  1. 第一部分,他研究了 APM 系统的属性,描述了系统监控中的反模式,介绍了监控 JVM 性能的方法,并提供了有效工具化应用源码的技术
  2. 第二部分中,他讨论了后编译技术工具,特别是拦截、类包装、字节码工具
  3. 第三部分,通过讨论应用生态系统的性能和可用性,进行了总结

Whitehead 一开始先讨论了 APM 反模式,这些反模式确定了公司在拼凑监控方案时可能会面对的关键问题。他讲了如下几个反模式:

  • 盲点:只监控环境中的一部分,而非所有的因素,会导致分析过程中不确定的结果
  • 黑盒子:类似于盲点,但范围是到应用或组件。一个黑盒子就是一个组件,其监控解决方案不可见其内部的性能
  • 散列和分离的监控系统:该反模式对比了分散监控和统一监控,对具体应用堆栈(比如操作系统、JVM、或数据库)深入但散列的监控很难确定性能问题的根源。Whitehead 给出了一幅图,很好地说明了这一点:

APM

  • 事后报告和相关性:试图从毫无联系的监控工具中提取数据,并将其结果关联成有意义的事情是很复杂的
  • 定时或应需式监控:许多监控解决方案开销都非常大,因此在出现问题后才配置来运行。在这种情况下,监控对确定问题根源来说可能为时已晚
  • 非持久化的监控:实时显示性能指标非常好,但如果不持久化数据,检查当前性能指标时,确定历史上下文会很困难
  • 依赖试运行监控:试运行时进行监控是好事,但完全依赖试运行监控是不够的,因为试运行时并不能完全预见用户的行为

讨论了反模式之后,Whitehead 介绍了理想的 APM 系统所具备的下列属性(直接摘录于作者的文章):

  • 无孔不入:它监控所有的应用组件和依赖关系。
  • 细粒度的:它能监控非常底层的功能。
  • 统一:收集的所有测量数据都发送到同一个支持统一视图的 APM 上。
  • 持续:它持续每周 7 天、每天 24 小时监控。
  • 高效:收集性能数据不能对监控目标有不利影响。
  • 实时:被监控的资源指标能可视化,可报告,并可实时地提醒。
  • 基于历史:被监控的资源指标要持久化到数据存储中,从而使历史数据能可视化、比较并报告。

接下来 Whitehead 详细说明了满足这些需求的技术解决方案。他定义了一组“追踪器”,负责从监控组件获取数据,并将其发送给“性能数据源”。他解释了这些追踪器的特性,它们包括上述那些方面,因为不论指标是基于间隔采样、变量增量、粘性(表示它们不频繁改变)、基于事件、还是灵敏的,这些追踪器能以所收集数据的特性为基础自动发现它们的类型。然后他讨论了常用的收集器模式,比如轮询、监听、拦截。

Whitehead 重新研究了核心 JVM MBeans,以此深入研究了监控的细节,还为收集那些 MBeans 和应用特定的 JMX 数据构造了一个监控框架。随后他将注意力转到了监控类和监控方法,并回顾了四类常用的技术:

  • 源码工具:手动将其加入应用中
  • 拦截:进行调用时进行拦截,比如通过 AOP,并捕获工具指标
  • 字节码工具:在运行时修改应用的字节码,以注入性能收集器
  • 类包装:用另一个包含工具逻辑的类包装或替换目标类

展示了如何实施源码工具(第一部分)之后,他确定了评估传入数据的规则和阈值。

在第二部分,他将注意力转到了后编译技术工具。他回顾了如何利用 EJB3 拦截器、Servlet 过滤器拦截器、EJB 客户端拦截器和内容传递,以及 Spring 拦截器来捕获应用的性能指标。他介绍了如何使用 JDBC 驱动、连接、语句、结果集对象的类包装来工具化 JDBC,并由此工具化数据库调用。最后,他介绍了字节码工具(BCI)是怎样工作的,还有 JVM 怎样提供一个标准的机制来通过 javaagent 这一 JVM 启动参数集成 BCI。为了说明 APM 厂商为什么跳过类包装选择 BCI,他给出了如下的性能图:

BCIChart

Whitehead 回顾了对 Java 应用归属的生态系统(也就是操作系统和宿主环境,其中包括数据库和消息基础设施)的监控策略,以此对该系列进行了总结。他讨论了代理监控和无代理监控的挑战和好处,接着深入研究了对 Linux/UNIX 系统和 Windows 系统的监控。他迎接的下一个挑战是数据库监控和上下文跟踪。他描述了 JMS 和消息系统,并说明如何通过合成消息和 JMX 的结合来监控它们。在第三部分结尾处,他讨论了可视化和报告功能,并给出了可视化技术的屏幕快照示例,包括仪表盘。

总之,该文章系列对性能监控进行了介绍和深度纵览,并包括细节层次,让读者理解在现成监控解决方案中的许多技术。

要获取更多关于性能和可伸缩性的信息,请阅读InfoQ 上的“性能和可伸缩性”页面

查看英文原文:An in-depth overview of modern Application Performance Management

DevOps架构文化 & 方法