稳定性建设之为什么/如何测试单核QPS(node视角)
此文从node视角出发,可能node和其他语言起的服务处理能力可能不太一样。但压测工具,和测试QPS的思路,我觉得应该是一样的
首先,为什么要知道单核QPS?
-
QPS是服务端性能的体现
-
知道单核QPS后,可以预估当前服务能承受的最大请求压力
-
举个栗子,假设单核QPS是100,服务器集群有20核,那么能承受的QPS就是2000
-
当你的服务受到攻击时,比如DDoS攻击。你可以根据上面得到的2000,加上公司防火墙和负载均衡层和CDN层,就能得到你的服务能承受的最大攻击(每层都有自己的上限)
-
比如:假设CDN层能挡住99%的流量,公司防火墙和负载均衡层能挡住99%,都没超过最大上限的话。当前能抗住的最大攻击QPS是:MaxQPS * 1% * 1% = 2000, 得到 MaxQPS = 2000万
-
如果要承受住2亿的流量,那么就要把2000提升到2万,2万/100 = 200核,等于扩容10倍
-
如何测试得到单核QPS?
最重要的一点:到真实部署的服务器实例上去用压测工具测试QPS,用localhost本地访问,避免网络时延的干扰
举个栗子,用压测工具压测的效果
- 压测工具不熟悉的话,可以看我另一篇:juejin.cn/post/709680… 自己再去多尝试玩玩
(第一次用1个连接测)
命令行输入:wrk --latency -t1 -c1 -d10s "http://0.0.0.0:3000"
结果:
Running 10s test @ http://0.0.0.0:3000
1 threads and 1 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 73.15ms 9.21ms 129.77ms 92.70%
Req/Sec 13.49 4.95 20.00 63.00%
Latency Distribution // 这里时延,几乎就是服务端处理的时间(我这里测的是SSR服务,所以比较慢)
50% 71.52ms
75% 75.19ms
90% 77.99ms
99% 126.62ms
137 requests in 10.05s, 113.77MB read // 10.05s内总共请求了137次
Requests/sec: 13.63 // 这里是QPS
Transfer/sec: 11.32MB
(第二次再测一遍,注意后面的参数要变,设置接近上面QPS的值,我这设的是12,-t12 -c12)
命令行输入:wrk --latency -t12 -c12 -d10s "http://0.0.0.0:3000"
结果:
Running 10s test @ http://0.0.0.0:3000
10 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 691.83ms 164.47ms 1.24s 78.57%
Req/Sec 1.11 1.07 10.00 84.29%
Latency Distribution // 这里的时延是合起来的,12个请求并发的效果
50% 697.77ms
75% 735.12ms
90% 916.95ms
99% 1.18s
140 requests in 10.05s, 116.27MB read // 10.05s内总共请求了140次
Requests/sec: 13.93 // 这里是QPS
Transfer/sec: 11.57MB
看看2次的QPS结果相差大不大,在调整连接数。正常测单核的话,应该相差不大
码字不易,点赞鼓励!!