群里有同学遇到了一个性能问题,问题表现是这样的:静态资源放在Nginx,资源大概十几M大小,Nginx用docker部署,压测时发现静态资源加载很慢。在群里问该如何排查和分析。
首先,这个压测的场景中会加载静态文件,我们常见的静态资源主要有图片或者前端的一些页面;其次资源大小为10+M,那可以假设这个静态资源为图片或者短视频;问题描述中提到了Nginx用docker部署,静态资源挂载在Nginx,那么Nginx的存储资源需要考虑,为什么呢?
在压测过程中,一般都是模拟多个不同用户请求去访问URL的,如果每次请求都返回不同的图片,并发比较高的情况下,服务的IO压力会比较大。还有一种情况需要考虑,就是压测集群到被测服务之间的网络带宽资源,如果带宽只有100M,那实际的传输效率理论上峰值只有12.5M/S。这种场景下就会出现一个问题:即使并发再高,它实际的TPS可能是<=1的。
很多测试同学在执行性能测试时常犯的错误就是不考虑实际的业务场景和被测服务的配置和网络带宽,无脑模拟高并发请求,这样做既不科学也不合理。实际上应该考虑具体的业务场景,以及被测服务的配置,然后再设计脚本,比如电商业务常见的秒杀场景,这个时候可以模拟高并发。
网上很多文章介绍了压测工具如何使用,测试数据如何准备以及如何模拟并发的技巧,但是在我看来这些都是手段。性能测试最重要的环节是性能需求分析阶段,在分析阶段就应该尽可能考虑到被测的业务场景特点,背后的系统架构和技术实现方案是否合理,是否存在潜在的性能瓶颈点。压测,只是验证的手段,而非验证的目的。