2017年09月25日 作者:
“地图开发科普篇”是一个地图开发相关知识连载栏目,不定期向大家分享一些在地图开发时会用到的小技巧、小知识等。今天小秀儿给大家分享的是性能测试的目的和方法。
什么是性能测试?简单的说就是以一定的手段或方式,寻找或验证目标在不同条件下完成服务的能力。负载测试和压力测试都是性能测试的一部分。
进行性能测试,一定要有预期的目的,再根据目的和服务的特性,确定具体的方案并执行,得到可判断的性能指标。
总体上来说,性能测试一般有3大类目的:寻找性能瓶颈,验证性能是否满足需求,性能调优。从形式与关注方向上来说,又大致可以分为线下测试,线上测试,全链路测试3种。
01、线下测试
一般因为条件的限制,多采用线下单机的形式进行性能测试。这种情况下,一般可测试单机的性能极限和瓶颈,单机性能最优场景指标,或者评估最优配置(即调优的一部分)。
测试环境通常按照与线上机器配置一样的单台服务器部署服务,引擎,数据库等。
测试方法常用性能压测工具jmeter来进行测试。这个工具对于各种协议支持较好,线程组,参数,上下文操作也比较全面。如果有特殊需求,jmeter也提供了java sampler的方式来自定义扩展脚本测试。
测试数据则来源于模拟,Mock或者线上数据的拷贝。
因为是线下测试,就不会污染线上环境,也不会影响用户的正常使用。
因此可以总结其优点是实现简单,风险低,能发现一定的问题,但缺点也与其相对—调用场景与线上不一致,复杂环境无法验证,数据的真实性不够,上下链路问题的遗漏。
02、线上测试
当条件允许,或者有必要需求的时候,可能进行线上测试。常见的线上测试目的大概分为3种:容量评估,单机极限,集群极限。
环境是线上环境的一部分,常见方式是将某个机房作为测试的环境。为了不影响正常用户的使用,可能需要做数据隔离,环境隔离,加上压测表识区分测试流量等。
测试方案-只读请求,可以如线下一样进行压测。需要读写的则可以通过引流的方式进行。通过nginx proxy,负载权重,tcpcopy等方式,将线上流量引入指定环境。从量的级别上可以全量,指定接口,指定url,或者按一定比例组合。
可以看到,场景,环境,数据等真实性是其优点,可以真确的评估线上的性能能力。但缺点也是显而易见的,线上环境的读写压力及风险,实现复杂,服务集群的成本也是相对高昂的。
03、全链路测试
通过端到端的测试,发现整体环节中的网络,应用,中间件,存储各个环境的问题,找到性能瓶颈,极大提升系统能力,并保障全链路的稳定性。通过全部链路各个环节的性能评估,也可以为高峰期系统容量规划提供决策依据。
全链路压测投入非常巨大。首先环境是整体全套的线上环境,为了适配,分析,追踪数据,需要改造数据,服务功能,从前端到应用服务,中间件,到引擎,数据库等底端一切环节。
比如抽取基础数据,分析业务链路与模型,改造业务,测试数据隔离(建立影子表等方式),中间件改造(识别测试流量),建立安全机制-对于各环节的监控和保护,日志统一化,行为追踪,统计分析等等。
优点显而易见,缺点也不言而喻。涉及产品广,人员多,成本高,风险很大,如何有效的组织推进是很大的挑战,也需要很高层面的支持。但收益也是非常明显的。
以上介绍了一些测试的目的和方法。到底怎么做,还是需要因地制宜,根据需求而来。
版权所有 © 北京秀友科技有限公司