柚币抽奖压测报告

1. 概率验证:

抽奖概率主要包括2个方面:

  • 奖品概率:后台设置奖品的获奖概率,验证抽奖获得的奖品是否符合概率分布;
  • 奖品概率浮动:当非默认奖品C的库存变为0时,默认奖品的获奖概率随之增加(增加值为非默认奖品C的获奖概率);

基于以上2点,我们设计奖品及概率分布如下表:

奖品列表 获奖概率 库存 是否默认
奖品A 40% 10000
奖品B 30% 10000
奖品C 30% 0
其他 0% 10000

测试的样本数目为1000次抽奖,需要得到的结果为:抽中奖品A的概率约为70%(即40%+30%),抽中奖品B的概率约为30%,抽中其他奖品的概率为0。

基于以上的设计,使用Jmeter工具模拟用户抽奖,结果符合预期,如下表:

image.png

注:我们在使用Jmeter时使用了断言的方式,即抽中奖品A返回true,其他false,同时,我们也通过检查结果树确认返回false的奖品均为奖品B。所以上表的错误率30.10%代表抽中奖品B的概率,69.90%表示抽中奖品A的概率。

2. 是否超卖验证

超卖可能出现的场景:当奖品数为1个时,再次多个用户请求抽奖,存在>1个用户抽到奖品。针对这种测试场景,确定测试方案如下:

将奖品库存设置为1,1000并发进行请求,验证只有1个用户抽奖成功,其他用户返回活动已下线。

根据上述方案,测试结果:无超卖现象。

3. 接口压测

本次主要针对2个涉及到性能的接口进行压测:柚币抽奖 & 获得额外奖品。压测结果如下:

接口名称 并发量 TPS 平均响应时间(ms)
柚币抽奖 48 18.7 2286
额外奖品 48 176.7 243

通过以上数据可知,柚币抽奖接口性能较低,低于预期,即柚币商城首页接口(tae_coin)的接口性能(TPS 约为60),上线风险较高。

下面针对柚币抽奖接口涉及到的接口做具体分析:

3.1 柚币中心接口

首先,先对柚币中心的查柚币、扣柚币、加柚币进行压测,该部分压测请厦门@翁秀妹@周泽润进行了协助。@翁秀妹在内网环境下,得出这3个接口的压测结果如下:

接口名称 并发量 TPS 平均响应时间(ms) CPU占用率 平均负载
查柚币 48 228 308 6% 1
扣柚币 48 126 559 18% 3
加柚币 48 447 102 56% 24

因为电商这边是通过公网与柚币中心进行交互,所以,我们又针对公网环境对上述3个接口进行了压测(48并发、5min),因柚币中心的服务器无法监控,我们仅给出接口对应的TPS和平均响应时间,如下表:

接口名称 并发量 TPS 平均响应时间(ms)
查柚币 48 36 1194
扣柚币 48 41.8 1030
加柚币 48 343.3 124

Jmeter数据如下:

查柚币


image.png

加柚币


image.png

扣柚币:


image.png

由上面数据可知,目前柚币中心接口经过改造后,扣柚币、查柚币接口在走外网的情况下TPS较低、平均响应时间较长。

然后,我们针对柚币抽奖、额外奖品接口进行压测,其中,柚币抽奖接口涉及到柚币中心的查柚币、扣柚币、加柚币接口,额外奖品如配置为柚币商品,则涉及到柚币中心的加柚币接口。这里为了验证电商独立业务代码,暂给额外奖品配置为非柚币商品。

3.2 柚币抽奖接口

压测方案:

并发数为48,稳压5min,利用332个不同用户不断地去抽奖,获得该接口的TPS和平均响应时间,同时监控服务器性能。

压测结果:
接口名称 并发量 TPS 平均响应时间(ms) CPU占用率(应用服务器) CPU占用率(数据库)
额外奖品 48 18.7 2286 12% 1%

Jmeter数据统计:


image.png

通过上面数据及代码日志,可知柚币抽奖的主要耗时集中在curl请求柚币中心的扣柚币接口上面,所以造成该接口耗时较长,其中查柚币已在柚币首页时进行了缓存优化,所以柚币抽奖接口不会调用查柚币接口。

代码log日志——记录功能模块耗时


柚币抽奖压测报告_第1张图片
image.png

3.3 额外奖品接口

压测方案:

并发数为48,稳压5min,利用332个不同用户不断地去领取额外奖品,获得该接口的TPS和平均响应时间,同时监控服务器性能。

压测结果:
接口名称 并发量 TPS 平均响应时间(ms) CPU占用率(应用服务器) CPU占用率(数据库)
额外奖品 48 176.7 243 80% 5%

Jmeter数据统计


image.png

你可能感兴趣的:(柚币抽奖压测报告)