開發與維運

压力测试指导方案

1 压测流程

1.1 压测核心步骤

  • 压测方案确定
  • 压测工具配置
  • 压测执行
  • 压测结果评估

2 压测方案

2.1 压测范围确定

  1. 小程序首页(简称首页):用户进入该页面涉及的所有商户端接口(链式调用仅需压测一级接口。)
  2. 小程序内活动营销推广主链路(简称PR链路):用户走完推广链路涉及的所有商户端接口
  3. 权益线上核销链路(简称核销链路):用户完成核销所涉及的所有商户接口

2.2 压测信息收集

  • 收集要求

    • URL获取全量,知道每个URL的调用链路
    • 压测是全链路的,不会遗漏底层的调用,如果调用了下游服务(如第三方的城市列表等服务),需要确认下游服务的系统性能(TPS)
    • 务必注意不能让压测数据污染线上数据(对于可能污染线上数据的接口,请做好准备工作,如压测时切换到空库等)
    • 如果有缓存,但是缓存时间较短(缓存有效期不足12小时),建议按无缓存压(压测时关闭缓存)
  • 以下为某小程序为例
业务地址(小程序内路径) 服务 接口地址 是否有缓存 是否调用下游服务
未登录,进入首页 初始化session URL https://test1.domain.com.cn/mwos/rest/home/initSession 无,写入数据库
初始化banner图片 URL https://test1.domain.com.cn/mwos/rest/home/initHome 有缓存,24小时更新
获取用户信息 URL https://test1.domain.com.cn/mwos/rest/miniapp/getUserInfo 是,调用支付宝https://openapi.alipay.com/mwos/rest/miniapp/getUserInfo
获取登录信息 URL https://test1.domain.com.cn/mwos/rest/miniapp/login 无,读取数据库
首页->点餐按钮 获取城市定位 URL https://test1.domain.com.cn/mwos/rest/misc/search/getCityByRgeoCode 无,读取数据库 是,调用某提供商 https://XXX.XXX.com/getLocation

2.3 计算压测模型

根据曝光量与转化率模型计算小程序压力承受目标:
假设小程序全天曝光量为3.6亿,转化率3%,按照80:20定律计算:
(3.6亿 * 0.03 * 0.8) / (24 * 3600 * 0.2)= 500 tps

根据接口在链路中被依赖情况计算各接口压力承受目标:
如现在商户后端有3个接口A,B,C。每个接口在链路中被依赖的情况如下:

链路名称 要求TPS 该链路需要调用的接口
首页 要求500tps 接口A
接口B
PR链路 要求200tps 接口B
接口C

因此各个接口压测目标值应该为:
接口A:500tps
接口B:700tps(500+200)
接口C:200tps


3 压测工具配置

压测工具选型:
image.png

支付宝行业压测中心(文档查看需要使用支付宝开放平台账号登陆)
平台地址:https://stresstest.alipay.com
帮助文档:https://stresstest.alipay.com/main#/help.htm

4 压测执行

注意事项:
如果目标是500tps,不要一开始就施压500tps,先用10tps先看下,根据服务器、数据库负载情况,再慢慢追加;
调整的原则是:

  • 每个等级压测5分钟,观察后在调整;

    • 平台主要观察:耗时趋势,成功率
    • 服务端监控:cpu、DB: load,cpu,gc;
  • 如果按100tps追加,前面追加可以一直100tps追加,后面接近预期时,追加慢一点,如改成50tps;
  • 如果发现从500没有问题,但是追加100发现有报错,那么不要直接暂停,先将tps降一下,降到850看下效果,再根据情况调整,摸到一个准确的值;

使用技巧:

  • 页面上可以使用固定模式,时间选择长一点,选个2小时;
  • 如果发现耗时增长,压力过大,服务器报错,立马停止;
  • 下次启动时,还是需要慢慢增加,可以考虑稍微大一点的值增加,比如200tps,追加的时候可以稍微快一点,因为已经知道在500下不会有压力;

5 压测评估

类别 判断维度 不通过 通过 备注
服务端性能 超时概率 大于百分之一 小于百分之一 性能测试团队根据通过标准,判定被测性能点不通过,需要由专家组来评审是否上线
错误概率 大于百分之一 小于百分之一
TPS 小于期望高峰值 大于期望高峰值
CPU 利用率 大于 75% 小于 75%
响应时间 大于2s 小于2s
Load 平均每核 CPU 的 Load 大于 1 平均每核 CPU 的 Load 小于 1
JVM 内存使用率 大于 80% 小于 80%
Full GC 频率 平均小于半小时 1 次 平均大于半小时 1 次

Leave a Reply

Your email address will not be published. Required fields are marked *