微信小程序性能测试之jmeter踩坑记录(三)

接上篇:微信小程序性能测试之jmeter踩坑记录(二)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

线性压力测试

线性测试主要测试集群性能是否随着服务器数量呈线性增长。此次测试采用go模拟的后台程序作为接受压力的B机,分别记录了在1台,2台,4台,8台,16台ecs服务器集群下系统的总并发数(CPU负载均为70%)。

结果分析:

下面分别是1,2,4,8,16台ecs的CPU负载图和并发数:

  • 1台ecs并发数为24000RPS左右,如下

微信小程序性能测试之jmeter踩坑记录(三)

  • 2台ecs并发数为48000RPS左右,如下

微信小程序性能测试之jmeter踩坑记录(三)

  • 4台ecs并发数为96000RPS左右,如下

微信小程序性能测试之jmeter踩坑记录(三)

  • 8台ecs并发数为192000RPS左右,如下

 微信小程序性能测试之jmeter踩坑记录(三)

  • 16台ecs并发数为384000RPS左右,如下

微信小程序性能测试之jmeter踩坑记录(三)

由上可知,集群并发数随着集群机器数量呈线性增长

 

单机压力测试

单机测试主要测试单机的并发量。发起压力的机器采用了1台跟压测中间件的A机同一规格(8核16G)的ecs,被压测的机器采用了1台同样配置的ecs。测试在单一节点下的php服务器能承受住的压力情况。为了模拟php接口需要的各种参数,这次采用了Jmeter发起压力请求。

单机空压

空压选用了业务逻辑最简单且不会操作数据库和Redis的授权接口CosAuth,以表示php服务器所能承受的最大并发请求数。下图是Jmeter的压力测试结果:

 微信小程序性能测试之jmeter踩坑记录(三)

可以看到此时显示的并发数平均为3000 RPS水平。下面再来看看此并发数下php单机服务器的各项硬件指标:

微信小程序性能测试之jmeter踩坑记录(三)

由上图可知,在php单机并发数达到3000RPS的时候,服务器的CPU负载已经达到了90%左右,已接近极限水平了,故php单机的空压并发请求数为3000RPS左右

单机其余接口压测

1,php单机登录接口(login)在服务器CPU满负载(90%~100%)下的并发数如下图所示:

微信小程序性能测试之jmeter踩坑记录(三)

可以看到php单机登录最大并发数平均为2200RPS左右。 

 2,php单机下单接口(addOrder)在服务器CPU满负载(90%~100%)下的并发数如下图所示:

微信小程序性能测试之jmeter踩坑记录(三)

可以看到php单机下单最大并发数平均为500RPS左右

3,php单机登录加下单混合(login+addOrder)在服务器CPU满负载(90%~100%)下的并发数如下图所示:

微信小程序性能测试之jmeter踩坑记录(三)

可以看到php单机登录加下单混合最大并发数平均为2000RPS左右

4,下图是php单机的登录下单混合业务场景在服务器CPU70%负载(即正常可接受范围内CPU的最大负荷)下的并发数:

微信小程序性能测试之jmeter踩坑记录(三)

可以看到php单机的登录下单混合业务场景在服务器CPU70%负载的并发数约为1500RPS

php单机压力测试结果分析

由上文可看出,php单机的登录最大并发数为2200RPS左右,而目标登录并发数为500000RPS,故计算出至少需要500000/2200=227.27台8核的ecs服务器,共需要228*8=1824个ecs核心,才能满足需求。

考虑到如此多的ecs成本颇高并且极有可能阿里库存不足,建议将登录接口采用go进行编写和处理,而其余业务采用php进行处理

另一方面,从上文看出php单机的下单最大并发数为500RPS左右,下单目标并发数为15000RPS,故需要15000/500=30台8核的ecs,若要是服务器在正常符合范围内工作(CPU<=70%),则需要15000/(500*70%)=42.85台ecs即可达到下单的需求

 

---------------------------------------------------------------------------------------未完待续-------------------------------------------------------------------------------

 

微信小程序性能测试之jmeter踩坑记录(三)

上一篇:小程序开发日记-08工作流的页面重用


下一篇:node.js 实现微信定时推送