一、什么是压测?为什么要做压测?
压测,也叫做压力测试,是通过模拟用户请求,来帮助我们评估系统QPS和发现系统瓶颈所在,是一个高可用系统的一个必要手段之一。
二、压测流程是怎样的?
一般压测分为以下几步:
- 确定压测目标:如哪个接口/方法、压测期望QPS等
- 制定压测计划:如压测时间、压测频率、压测方法等
- 创建压测环境:一般谨慎在生产环境压测,避免影响线上正常运行。可以选择在同配置的测试环境/灰度环境下做压测
- 执行压测
- 观察监控指标:观察压测指标和系统监控情况,及时发现系统瓶颈点,并进行对应的修复或调整参数
- 优化参数:通过观察监控指标后,调整压测参数或机器配置,尽量将QPS达到预期要求
三、常用压测工具
常用压测工具有JMeter等,这些工具可以在压测后,提供详细的压测报告和性能分析。(具体可参考官网https://jmeter.apache.org/)
四、Q&A
1、什么是QPS?如何计算接口QPS?
QPS指的是每秒处理请求的次数,比如QPS为1000则表示每秒可以处理1000个请求。
如果一个接口的平均时延为50ms,那么理论上这个接口每秒可以处理1000ms/50ms=20
次请求,那么QPS=20.
如果连接池/线程池的连接数是100,说明有100个连接可以同时处理请求,那么QPS=20*100=2000
。
所以合理配置好连接池/线程池参数,可以有效提高接口QPS。
2、在压测某个服务接口时,明明这个服务配置已经很高了,为什么还会有超时的问题?
在压测某个服务接口时,不仅仅是跟该服务配置有直接关系,也和依赖服务配置有间接关系。
比如我们要压测A服务的a接口,a接口要调用B服务的b接口,两个服务的配置为:
- A服务的服务配置为
4C4G
,a接口理论上QPS为1000
- B服务的服务配置为
1C1G
,b接口理论上QPS为10
那么当压测流量过来后,理论上前10个请求过来会处理很快,而第11个请求由于超过b接口的QPS了,所以会阻塞等待一段时间。
所以,当我们做压测时,要保证我们依赖的服务也能满足我们预期的QPS,否则这个压测结果将是不准确的。