APM(Application performance management)这个行业在国外很火(专注于APM产品的公司有www.newrelic.com,www.keynote.com,www.compuware.com等);当然最近几年国内的市场也慢慢成熟起来,不仅一线互联网企业成立了自己的应用性能监测和速度团队,许多专注于APM产品研发的初创公司也如雨后春笋般层出不穷,各种云监测,云加速,SDK监测,WEB监测产品出现在应用开发者的视野当中。

随着APM行业如火如荼的发展,当前市场中APM方向主要涉及网络监测,系统管理,应用注入和web性能监控等领域,产品更倾向于运维和测试人员的需求,当然随着DevOps的概念被业界提出和接收,开发人员也开始关注起APM的产品;
让我们具体的来看看APM是什么把;

1、从APM的概念上来看,Gartner将APM分解成5个概念维度,它们分别为:
1)、终端用户体验监测(主动和被动);
2)、应用运行时架构和建模;
3)、用户定义事务类监测;(商业事务监测和管理)
4)、告警和数据分析;

2、从APM的监测指标上分类,主要有以下两种指标集合:
1)、衡量终端用户体验的性能指标;比如,应用在并发和流量峰值时的各种平均响应时间;
2)、衡量应用本身性能和资源瓶颈的指标;通过监测和改善这些资源指标基线,从而有效提高应用/系统整体性能表现;
结合用户端性能和资源瓶颈的两大类指标,我们就可以很容易的定位诸如WEB应用数据延迟的原因等应用性能问题;

3、APM领域由于涉及的技术和产品相当广泛,存在许多难点和挑战,主要有这两点;
1)、应用程序注入监测代码的难度,对跨组件应用监测尤其困难;
2)、跨硬件的应用的性能监测,涉及到虚拟化,分布式和云计算等技术;

本人在某度工作期间曾主导开发过多款移动应用性能监测工具和产品,下面我将简单介绍一下APM在移动方向的主要产品技术和演变趋势;

1、为什么要做移动应用性能监测

下图为亚马逊的统计,web页面加载速度与用户流量的流失率,相应的会影响到收入; 

图1.1 页面加载速度与流量流失率

下图google统计的页面加载速度与网站排名的相关性,相应的会影响到网站流量和收入;

图1.2 页面加载速度与网站排名的相关性

因此我们有理由相信,相同网页结构的情况下,更快的速度带来更好的用户体验,更快的速度带来更好的流量和收入;移动应用性能监测项目在这个背景下诞生,开始肩负它的职责并去完成它的历史使命;

2、移动应用性能监测方案的演进
我们主要从监测类型的演进、监测模式的演进、监测服务的演进趋势道来把;

2.1、监测类型趋势
近几年的趋势主要是从web app的自动化测试,web app的性能监测,native app的自动化测试 最后到native app的性能监测;

图2.1 监测类型的演进

代表的实现技术;
1)、web app的自动化测试;pc使用2g/3g网卡接入移动网络,使用桌面浏览器自动化测试工具和脚本进行功能测试;
2)、web app的性能监测;开发移动native app监测程序,使用tcpdump抓包和webview事件打点的技术,记录目标监测Url从建立http连接,下载目标基础页,下载基础页中资源,webview开始渲染页面到最终页面加载完成的各个性能指标;帮助开发者从网络层和用户交互层来进行app性能监测,快速定位页面加载延迟的问题原因;
3)、native app自动化测试;使用开源的移动自动化测试框架(robotium,monkeyrunner等)来进行navie app的功能测试;
4)、navie app性能监测;这里主要有两种解决方法;第一种,对robotium进行二次开发,在instrumentationrunner中增加底层系统性能指标和tcpdump数据的采集,通过分析采集自自动化app测试过程中产生的性能数据,定位app的性能瓶颈;第二种,使用sdk的方式,从java字节码层面hook住关心的性能指标,比如,sqllite的io性能,httpconnection api的性能,http的错误码,activity的性能,activity中函数栈的调用性能等指标,通过分析这些数据帮助开发者快速定位app的性能瓶颈;

2.2、监测模式的趋势
从web app和native app的单一行为监测 到 web app和native app的事务监测的演变;演变的原因是开发者开始越来越关心应用事务的性能,比如发生一连串行为过程中应用的响应和系统性能瓶颈,任何一个点的性能问题都会影响最终的用户体验,甚至是影响到收入;

图2.2 监测模式的演进

实现技术;
1)、web app的事务监测;主要监测用户登录web服务或者在进行某种行为时的性能,在移动监测中主要通过设置webview的cookie的方式来模拟用户的行为,记录整个行为过程中的网络数据报文和webview的事件时间;分析找到web app行为的性能问题;
2)、native app的事务监测;这里主要有两种解决方式;第一种,如前面所述通过对移动自动化测试框架的二次开发,增加性能数据的采集,由于移动自动化测试框架原生支持事务测试,我们可记录事务测试过程中的性能数据,通过后续的分析可定位事务监测过程中的性能瓶颈;第二种,如前面所述,使用sdk,记录activity之间以及单一activity生存周期内所有方法的方法调用栈信息来实现app的事务监测;

2.3、监测服务的趋势
从设备终端体验监测,网络到设备终端监测,终端到终端的监测到基于saas的中和监测服务的演变;

图2.3 监测服务的演进

早期的监测服务仅仅是提供用户手机设备的体验监测数据,直到这几年随着监测技术的演进才发展到终端到终端的监测服务,目前的技术能够做到从服务器进程到用户手机整个过程全方位多维度的性能监测,其中涉及到链路的监测,服务器响应性能,网络层的传输性能,浏览器的渲染性能,浏览器的交互性能等维度的性能数据采集;

3、行业内公司间技术对比

图3.1 技术覆盖面比较

后续的文章将从上面介绍的三种演进趋势来详细阐述移动应用性能监测的相关技术,未完待续…