ARM Introduction
我打算写一个系列来介绍 ARM,包括概念、实现、开发、以及与现存的管理软件产品的协作使用,预计包括四到五篇文章。不知何时能写完,不管了,今天先开个头,简单绍介绍介先
开始之前要说明的是,本文所介绍的 ARM 并非那个著名的、做 RISC microprocessors 的 ARM 公司,而是由 The Open Group 制定并维护的、用于监控和衡量软件性能的一套开发标准。以下是引自 ARM 官方网站上的定义:
The Application Response Measurement (ARM) standard describes a common method for integrating enterprise applications as manageable entities. The ARM standard allows users to extend their enterprise management tools directly to applications creating a comprehensive end-to-end management capability that includes measuring application availability, application performance, application usage, and end-to-end transaction response time.
当前 ARM 标准最新版本是发布于2007年6月18日的 4.1 version 1,不过因为目前商业或开源实现基本都还只支持到 4.0 version 2,所以本文后面谈论的 ARM 除非特殊标明,均指的是 4.0 version 2.
1. ARM 能解决什么问题
随着软件技术逐渐融入各行各业、工作生活中,除了功能方面的需求,人们也对系统的性能、可靠性等方面的要求也越来越高,会越发关心类似以下问题:
- 这些 transaction 成功了吗?
- 是什么原因导致某个 transaction 失败了?
- 客户体验到的系统响应时间是多少?
- 在整个交易过程中哪个部分耗时最长?
- 系统瓶颈在哪里?
- 如何能提高应用系统的性能?
- … …
ARM 正是用来回答这些问题的。通过在应用系统中引入 ARM APIs,可以让这些应用程序变得可管理、可监控,再配合相应的管理端系统,就可以捕获、分析运行时数据,回答以上这些问题了。
2. ARM 是如何工作的
Figure 1. Application - ARM management system interaction
典型的例子是这样的。应用程序在 transaction 开始或结束时呼叫(调用)ARM,接着 agent 收集诸如状态、响应时间、transaction 之间的父子关系等各种数据,并与管理端系统通信。管理端系统会分析得到的数据,并根据用户的要求给出各种数据报表。
3. Java Bindings
包括三个 Java 包:
- org.opengroup.arm40.transaction 是使用最多的主要包,应用程序在 transaction 开始或结束时调用相应的方法,ARM 实现将会衡量响应时间等。
- org.opengroup.arm40.tranreport 是一个替代包,除了衡量响应时间,还能形成报告。
- org.opengroup.arm40.metric 结合 org.opengroup.arm40.transaction 来提供对额外衡量指标的监控。
在这三个包里的都是接口。
4. ARM 实现
一个 ARM 实现包括两个部分:
- ARM library 包含对以上三个包中定义的接口的实现类,在运行时它会被载入用户应用中。
- ARM agent 用来接收和处理 ARM library 发来的数据。根据不同的设计,ARM agent 的差异性会很大,可能是一个简单的 jar library,也可能是一个独立的外部程序组件。我将会在后续文章中介绍具体的 ARM 实现时说明这一区别。
非常期待您对ARM Agent实现的大作!
是否可以发给我您对ARM Agent实现的其他文章,最好是一些细节的东西,我们现在正在开发这个东西。dcarmapp@yahoo.com.cn,万分感谢!
“其他文章”还没写呢
近来实在没足够时间写。
keep tuning..
目前我们要利用ARM为客户开发一个原型。遇到的问题:ARM Java版本,要利用JNI调用C函数,我不知道如何将业务监控数据存储到数据库中。也就是说,我们只是看到将ARM得到的数据打到控制台上,但不知如何存到数据库中。
请问我应该如何修改代码,才能将ARM agent数据保存到数据库中?数据库有标准的设计方法么(是否可以参考MyARM的数据库结构)?非常感谢
目前我们要利用ARM为客户开发一个原型。遇到的问题:我们只是看到将ARM agent 得到的数据打到控制台上,但不知如何存到数据库中。
请问我应该如何修改代码,才能将ARM agent数据保存到数据库中?数据库有标准的设计方法么(是否可以参考MyARM的数据库结构)?非常感谢
您是否有邮箱,以便可以和您交流下?我的邮箱dcarmapp@yahoo.com.cn
非常感谢
您是否有邮箱,以便和您交流?
是否可以和您通过邮箱联系?项目目前十分紧张,所以急切希望和您沟通。我的邮箱:dcarmapp@yahoo.com.cn
项目目前十分紧张,急切希望和您沟通。我的邮箱:dcarmapp@yahoo.com.cn
是否可以邮件讨论?dcarmapp@yahoo.com.cn
您有邮箱么
不用客气,很高兴看到有人对 ARM 有兴趣。
我的邮箱是 huangyunsong@gmail.com
我今天才知道有ARM这么一个标准,但它解决的问题正是我想要的,期待中。