<   返回

地图开发科普篇:服务性能测试方法全面解析

2017年09月25日 作者:

“地图开发科普篇”是一个地图开发相关知识连载栏目,不定期向大家分享一些在地图开发时会用到的小技巧、小知识等。今天小秀儿给大家分享的是性能测试的目的和方法。

 

 地图开发

 

什么是性能测试?简单的说就是以一定的手段或方式,寻找或验证目标在不同条件下完成服务的能力。负载测试和压力测试都是性能测试的一部分。

 

进行性能测试,一定要有预期的目的,再根据目的和服务的特性,确定具体的方案并执行,得到可判断的性能指标。

 

总体上来说,性能测试一般有3大类目的:寻找性能瓶颈,验证性能是否满足需求,性能调优。从形式与关注方向上来说,又大致可以分为线下测试,线上测试,全链路测试3种。

 

01线下测试

 

一般因为条件的限制,多采用线下单机的形式进行性能测试。这种情况下,一般可测试单机的性能极限和瓶颈,单机性能最优场景指标,或者评估最优配置(即调优的一部分)。

 

 地图开发

 

测试环境通常按照与线上机器配置一样的单台服务器部署服务,引擎,数据库等。

 

测试方法常用性能压测工具jmeter来进行测试。这个工具对于各种协议支持较好,线程组,参数,上下文操作也比较全面。如果有特殊需求,jmeter也提供了java sampler的方式来自定义扩展脚本测试。

 

测试数据则来源于模拟,Mock或者线上数据的拷贝。

 

因为是线下测试,就不会污染线上环境,也不会影响用户的正常使用。

 

因此可以总结其优点是实现简单,风险低,能发现一定的问题,但缺点也与其相对—调用场景与线上不一致,复杂环境无法验证,数据的真实性不够,上下链路问题的遗漏。

 

02线上测试

 

当条件允许,或者有必要需求的时候,可能进行线上测试。常见的线上测试目的大概分为3种:容量评估,单机极限,集群极限。

 

环境是线上环境的一部分,常见方式是将某个机房作为测试的环境。为了不影响正常用户的使用,可能需要做数据隔离,环境隔离,加上压测表识区分测试流量等。

 

地图开发 

 

测试方案-只读请求,可以如线下一样进行压测。需要读写的则可以通过引流的方式进行。通过nginx proxy,负载权重,tcpcopy等方式,将线上流量引入指定环境。从量的级别上可以全量,指定接口,指定url,或者按一定比例组合。

 

可以看到,场景,环境,数据等真实性是其优点,可以真确的评估线上的性能能力。但缺点也是显而易见的,线上环境的读写压力及风险,实现复杂,服务集群的成本也是相对高昂的。

 

03全链路测试

 

通过端到端的测试,发现整体环节中的网络,应用,中间件,存储各个环境的问题,找到性能瓶颈,极大提升系统能力,并保障全链路的稳定性。通过全部链路各个环节的性能评估,也可以为高峰期系统容量规划提供决策依据。

 

全链路压测投入非常巨大。首先环境是整体全套的线上环境,为了适配,分析,追踪数据,需要改造数据,服务功能,从前端到应用服务,中间件,到引擎,数据库等底端一切环节。

 

 地图开发

 

比如抽取基础数据,分析业务链路与模型,改造业务,测试数据隔离(建立影子表等方式),中间件改造(识别测试流量),建立安全机制-对于各环节的监控和保护,日志统一化,行为追踪,统计分析等等。

 

优点显而易见,缺点也不言而喻。涉及产品广,人员多,成本高,风险很大,如何有效的组织推进是很大的挑战,也需要很高层面的支持。但收益也是非常明显的。

 

以上介绍了一些测试的目的和方法。到底怎么做,还是需要因地制宜,根据需求而来。

 

 

版权所有 ©北京秀友科技有限公司 

京ICP备15012051号-2

版权所有 © 北京秀友科技有限公司

京ICP备15012051号-2