性能环境,也是困扰
性能测试人员很重要的一个问题。如何模拟线上真实的环境?如何在测试环境进行的性能测试结果,能准确的反应到生产线上去?
先聊下我们的做法。
首先确认线上的网络拓扑图。比如:
左边是线上环境,线上一般是分布式集群部署。比如用户访问服务器A,而服务器A需要依赖到服务器B和C提供的服务,而服务器C与DB存储打交道。那么在性 能测试环境,为了模拟用户的行为,需要搭建服务器A,B,C和DB各一台。通过对单台服务器A的压测结果TPS,再线性乘以机器数量,完成线上服务器A集 群的TPS的评估。
这样做,简单的完成了线上和线下的结果推算。但是这样做,有一个前提:就是保证线上和性能测试环境的机器配置是一样的。机器的配置分为2个部分:硬件和软件。
硬件方面,比如机器是4核4G的xen虚拟机,千兆网卡,SATA磁盘。
软件方面,包括
操作系统的版本,位数,比如:redhat 5.4,**位机器;JDK版本:openJDK 1.6.0;JVM参数配置;
web容器:tomcat7.
上面说的是应用层面,性能测试还有很重要的一步,就是性能测试数据的准备。
性能测试
数据库的环境也与应用层一样,保持和线上一样的硬件与软件配置。这里有个问题就是:生产线上一台数据库,对应多台应用。而在性能测试环境中,被我们映射成1:1的关系后,很难找到数据库层的性能瓶颈,因为在压测过程中,应用层会比数据层更快到达性能瓶颈。
接下来,简单描述下性能测试数据的准备。性能测试数据的准备也分为2个部分。1是业务数据,2是基础数据。
什么是业务数据?业务数据就是性能测试要模拟的用户拥有的数据。比如卖家A,有100个商品。100就是业务数据。基础数据就是商品所在表的总数据量。比如100W。
性能测试的数据,不光要关注业务,更要关注数据库表的量级,因为100条数据,和100W条数据,性能测试出来完全是两个结果。
为了数据的准确性,性能测试的数据表,也要满足生产线上表的量级。
满足了这些条件,性能环境才能基本真实模拟生产线的环境,测试出来的结果才有推算上线后结果的可能。
后记:
每个公司的业务不同,系统架构也不同,所以性能测试环境方面肯定有很大的差异。我只是简单的写了我所在公司的性能环境的一些知识,分享给大家,供大家一个参考,希望你能从这里获得有用的东西。关于性能测试环境,我的一些观点:
1. 如果允许生产线做性能测试,就尽量做生产线性能测试。同样的环境,性能测试的结果才有意义,性能测试的价值也最大体现。
2. 测试环境的配置可以与线上一样,可以做下N:1的映射。结果线性乘以机器数,可以评估线上集群的负载。
3. 真没条件,线上线下环境差异很大。就尽量找一些代码级别的性能瓶颈。优化后再上线,线下的结果就不用去推算线上,很不科学