目的:为了不影响线上环境数据库数据,我们在压测的时候会针对性的创建新租户来确保数据打入到租户系统中,本文主要说明新增租户后还需要做什么操作。以及压测过程后端需要做什么操作。
1.部署你的压测监控工具 Skywalking 来监控压测过程中的性能问题
2.创建一个新的租户数据库
-
联系运维copy一份相同的数据库,并重命名为压测数据库名称xxxxx_stress_test
-
将此数据库中的wechatId全部改成新分配wechatId 此文档中的附录有一个存储过程可以一件替换wechatId。
-
删除订单数据。(用delete)
-
member表中将用户敏感信息配置全部脱敏处理,包括(openId,名称,手机号)
-
关闭通知类定时任务(短信,订阅消息)
-
三方确认注册/订单推送是否会推送到oms系统,如果不需要请关闭第三方调用配置
-
订单号生成规则修改,请更改订单号前缀,避免同一商户下订单号被占用导致无法完成支付。
-
在tenancy数据库增加你的租户路由信息。可参考()
-
重启多租户服务,来加载多数据源。estore-core/estore-manage/estore-campaign。。。等
3.横向扩展你的节点
-
一般进行压测过程中,我们会部署服务器或者增加配置。需要增加你的节点以保证升级配置得到最大程度利用
-
将新机器加入集群()
-
扩展你的节点。将一些流量较高服务扩展节点,使得服务器整体的内存使用率可以达到70%左右。一般我们会扩容gateway , estore-core。但是可别忘了品牌自己的一些扩展服务,例如campain服务。
4.经验积累
tps吞吐量上不去,远小于预期值,从以下几方面排查观测瓶颈具体在哪里
1.先确定机器配置,cpu,带宽,内存等
2.再从压测的接口整个调用链路排查
CDN->SLB(负载均衡)->nginx->网关->中间件(缓存)->DB
测试网管承载量,单独压测XXXX/info接口看下tps的情况
测试缓存是否存在问题,单独压测获取cofig接口,XXXXX/api/v4/estore/config/getConfig/XXXXX接口看下tps的情况
测试DB是否存在瓶颈,找个select命中DB的接口,单独压一下即可
3.压测可能出现瓶颈的地方
| 瓶颈点 | 表现 | 措施 | 备注 |
|---|---|---|---|
| SLB带宽 | 吞吐率低,服务器和数据库均无压力 | 1、查看阿里云EIP出口带宽监控图表2、检查CDN缓存规则,是否有不正常回源3、检查nginx gzip是否正常开启 | 单个EIP最高带宽200M,增加带宽需求额外费用 |
| 压测机带宽 | 吞吐率低,服务器和数据库均无压力 | 查看压测机带宽限制 | |
| WAF流量拦截 | 请求未打到服务器,错误率高 | 提前加好压测白名单 | |
| 网关(Gateway)瓶颈 | 网关错误率高,均为whitelabel错误 | gateway采用信号量控制并发,我们已经全局设置了常用服务的信号量,增加服务个数可解决 | |
| feignclient瓶颈 | 可查看nginx日志,如果相同接口出现不规则的响应慢或时快时慢 | 一般都是feignclient连接池不够,可增加连接池配置 | 默认可能没有连接池 |
| 数据库连接池瓶颈 | 可查看nginx日志,如果相同接口出现不规则的响应慢或时快时慢 | 增加最大连接池 | 商场项目均未配置,默认最大连接池个数是8 |
| 数据库瓶颈 | 并发量上来后,请求变慢 | 一般是慢sql导致,优化sql,增加索引 | |
| 业务逻辑事务瓶颈 | 部分接口响应慢 | 一般是事务粒度过大,导致锁表及锁等待,优化事物粒度 | |
| nginx配置优化 | 压测一段时间后吞吐率突然下降,nginx日志显示反向代理响应时间突然升高,普遍加1s | nginx反向代理尽量使用upstream来配置,并设置keepalive参数,如:upstream api_xxx{ server 127.0.0.1:10888; keepalive 2000; keepalive_timeout 120s; keepalive_requests 1000; } | 反向代理使用长链接,并使用连接池,避免出现连接数量的反复震荡 |