当前位置: 首页 > 技术与资源 > 技术分享 > 正文

浅谈应用性能的剖析方法

2015-12-23 15:10:36

作者:黄锦焯新炬网络高级技术专家。


现今社会信息化已经相当普遍,应用系统承载了日常生活中的方方面面,如企业Web应用、普通用户已经离不开的手机APP、以及目前推行的互联网+场景等等。涉及企业、用户需求的各种应用系统,最终用户的真实使用体验如何,一定程度衡量系统的成败。


1、应用性能管理的诞生


以上的信息化进程慢慢引入了应用性能管理(Application Performance Management)的概念,这是一个比较新的管理方向,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO)。使用全业务链的敏捷APM监控,可使一个企业的关键业务应用的性能更强大,可以提高竞争力,并取得商业成功,因此,加强应用性能管理(APM)可以产生巨大商业利益。


一个官方的定义,在wikipedia.org网站上其解释如下:应用性能管理是指对软件程序可用性以及性能的监测与管理,应用性能为确保一定程度的服务等级需要关注应用系统问题的检测与诊断,它是链接复杂IT数据与业务价值实现之间的桥梁。


2、应用性能管理的必要性


第一:业务,简单来说,就是各行业中需要处理的事务,业务是任何一家企业生存的基础,因为业务意味着收益,企业经营的最终目标是通过良性的业务运转带来合理利润。


黄锦焯-浅谈应用性能的剖析方法-1

第二:用户体验,在互联网时代产品能否获得成功,用户体验越来越成为关键,当用户使用产品的时候,体验之旅才真正开始,而这个过程是否愉快,将直接影响到产品的口碑,影响到销售。从企业产品与服务的层面来讲,用户体验分为三类,如下图所示。


黄锦焯-浅谈应用性能的剖析方法-2

根据某项消费者调查显示,60%的用户会对加载时间超过 3 秒钟的应用(网站或 App)失去兴趣。74%的受调查者表示等待时间不会超过 5 秒钟,当遇到一个性能表现很差的应用时,1/3 的受访者表示将转向竞争对手。在用户体验要求如此苛刻的竞争压力下,购物者的受挫经历对企业不仅意味着业务的损失,同时也是品牌声誉的损害。


综上所述,应用系统的性能已经成为制约公司业务发展的瓶颈,很难想象一个响应很慢,体验很差的系统能够留住更多的用户。同时现代应用的复杂度空前增大,影响系统性能因素繁多,给问题发现与定位带来巨大的挑战。


3、系统复杂性及性能优化难点


应用系统经历这么多年的发展,系统架构复杂多变,这里不再一一细讲,这里简单谈下目前Web系统的常见的一些性能问题涉及的层面:


黄锦焯-浅谈应用性能的剖析方法-3

以上的种种因素,带来的性能优化的难点:


1. 问题错综复杂,出现在系统各个层面,涉及业务层、逻辑层、平台层等。


2. 问题定位解决过程严谨,周期较长。


3. 业务逻辑复杂,部分业务由多个环节组成,组合型业务性能好坏标准不一。


4. 用户量大,无法保障每一个用户都完全不出问题。


5. 用户环境复杂,每个用户终端情况及操作习惯不一。


4、性能优化工具


因为应用系统性能优化是一项综合性非常强的工作,所以一般而已,我们不要借助一些辅助工具进行性能分析,国内外的APM工具有Compuware、iMaster、听云、New Relic、OneAPM、AppDynamics、RUEI等,通过这些工具获取的的性能数据,我们就可以进行系统性能问题监控、分析、告警等处理工作。


以下是一些工具的截图:


黄锦焯-浅谈应用性能的剖析方法-4
图:RUEI性能监控

黄锦焯-浅谈应用性能的剖析方法-5
图:OneAPM监控图

5、应用性能优化思路


首先,优化工作贯穿应用系统的各个层面:


黄锦焯-浅谈应用性能的剖析方法-6

因此,我们从一接收某系统的性能优化工作时,首先就要了解其系统架构,网络分布情况,主机配置,中间件技术,开发语言等等相关信息,以便后期工作顺利进行。


而优化工作的主体思路如下:


黄锦焯-浅谈应用性能的剖析方法-7

这里我们可能提及一下二八定律,应用系统性能问题也可以采用该定律,即影响某个系统整体性能的主要是因为20%的功能模块性能不佳导致的,因此,第一步我们需要找出重点优化的点,并且优化之,然后最终逐步提升整体系统的“面”层次性能。


6、应用性能的优化方法


A、SQL优化


应用系统的业务功能基本涉及的数据库操作,而影响业务性能的因素也很大程度是SQL的优劣导致,因此,我们就必须分析其各项业务请求的SQL性能,而SQL优化是另外一项专业工作,这里不再细讲。


B、业务系统变更


应用系统是由众多业务需求组成,不合理的业务需求导致不合理的功能设计也会引发系统性能问题,用一个例子说明一下:


某个查询功能业务需求一个输入框可以查询3个条件(受理号、流水号、区域位置):


黄锦焯-浅谈应用性能的剖析方法-8

以上需求必然导致功能逻辑层无法具体判断客户具体查询哪种信息,导致功能研发人员对库表3列数据库进行“or”匹配,从而不必要的数据查询消耗,最后导致需求不合理方面的性能问题。


这里对应的优化方法可以这样,分析出最终用户常用的操作习惯,将关键字条件细分成3个条件,这种是比较合理的,或者常用条件单独一个查询框,不常用的条件沿用原来的方式多条件模糊匹配方式,改造的结果如下:


黄锦焯-浅谈应用性能的剖析方法-9

C、大数据量优化


信息化程度越高,业务系统的数据存量越大,从而大数据的概念自然而生,这里不讨论超大数据量的情况,一般业务系统的数据库表达到千万级别,多多少少会对业务性能产生,这里也与SQL优化有关联,剔除SQL语句的合理性,我们可以从以下方面对大数据量相关功能进行如下优化:


(1)业务拆分:调研业务的特性,如果存在历史数据不常用的情况,我们建议对业务进行拆分,例如:将一个查询功能拆分为:在线查询和历史查询,实际上是对数据库表进行逻辑分解,从而达到优化在线查询性能的目的。


(2)分区改造:分析业务需求,对应形成规律性操作的功能,并且数据存量巨大的情况大,我们可以对规律性字段信息做数据库分区改造,并优化之,提升其增删改查等性能,这方面的改造要慎重,并且需要考虑周全,否则会顾此失彼,解决了这个性能问题,反而产生其他功能的业务性能问题。


D、架构升级


如果一个系统的性能问题较多,就要考虑现有的系统架构是否满足当前的业务需求,因为随着时间的推移,业务需求的不断新增,整个应用系统会慢慢出现一些新的性能问题,对此,如果单独优化某个功能点可能无法提升整个系统的用户体验,到这里,我们就要高层面的考虑业务架构、数据库架构的升级问题了。


7、总结


以上只是浅谈应用系统性能的必要性及某些剖析方法的个人理解,优化之路很长,优化的坑很深,大家共同学习进步才是王道。

上一篇:CMS内存回收机制分析
下一篇:使用Python一键生成Oracle性能excel曲线图