稳定性建设之为什么/如何测试单核QPS(node视角)

778 阅读2分钟

稳定性建设之为什么/如何测试单核QPS(node视角)

此文从node视角出发,可能node和其他语言起的服务处理能力可能不太一样。但压测工具,和测试QPS的思路,我觉得应该是一样的

首先,为什么要知道单核QPS?

  1. QPS是服务端性能的体现

  2. 知道单核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本地访问,避免网络时延的干扰

举个栗子,用压测工具压测的效果

(第一次用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结果相差大不大,在调整连接数。正常测单核的话,应该相差不大


码字不易,点赞鼓励!!