1 压测流程
1.1 压测核心步骤
- 压测方案确定
- 压测工具配置
- 压测执行
- 压测结果评估
2 压测方案
2.1 压测范围确定
- 小程序首页(简称首页):用户进入该页面涉及的所有商户端接口(链式调用仅需压测一级接口。)
- 小程序内活动营销推广主链路(简称PR链路):用户走完推广链路涉及的所有商户端接口
- 权益线上核销链路(简称核销链路):用户完成核销所涉及的所有商户接口
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 压测工具配置
压测工具选型:
支付宝行业压测中心(文档查看需要使用支付宝开放平台账号登陆)
平台地址: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 次 |