Node.js 使用nginx作为负载平衡器的意外测试结果

Node.js 使用nginx作为负载平衡器的意外测试结果,node.js,nginx,benchmarking,wrk,Node.js,Nginx,Benchmarking,Wrk,我正在使用以下场景对nginx/node.js拓扑进行基准测试: 直接对单个node.js服务器进行基准测试 nginx背后的Benchmark 2 node.js服务器(RR负载平衡) 对于这两个基准,“wrk”与以下配置一起使用: wrk -t12 -c20 -d20s --timeout 2s 所有node.js实例都是相同的。在每个HTTPGET请求上,它们迭代给定的数字“n”,并在每个循环上增加一个变量 当我执行测试用例时,我得到了下面列出的一些令人惊讶的结果。我不明白,为什么dua

我正在使用以下场景对nginx/node.js拓扑进行基准测试:

  • 直接对单个node.js服务器进行基准测试
  • nginx背后的Benchmark 2 node.js服务器(RR负载平衡)
  • 对于这两个基准,“wrk”与以下配置一起使用:

    wrk -t12 -c20 -d20s --timeout 2s
    
    所有node.js实例都是相同的。在每个HTTPGET请求上,它们迭代给定的数字“n”,并在每个循环上增加一个变量

    当我执行测试用例时,我得到了下面列出的一些令人惊讶的结果。我不明白,为什么dual node.js设置(拓扑2)在100万次迭代中的性能更差——它甚至比拓扑1上的100万次循环还要差

    1037个请求/秒(单个)与813个请求/秒(磅)

    我当然希望有一点开销,因为单个操作在node.js实例前面没有nginx,但是测试结果看起来真的很奇怪

    有1000万次和500万次迭代的调用似乎做得不错,因为吞吐量的增加与预期一样

    这种行为有合理的解释吗

    测试在一台计算机上执行; 每个node.js实例都在不同的端口上侦听

    Nginx使用标准配置,除了:

    • 端口80
    • 2个上游服务器
    • 代理\在“/”路线上传递
    • 1024(默认)工作线程连接(增加不会改变结果)
    场景1(single node.js服务器): n【百万】请求/秒平均/最大【毫秒】请求 10 134 87.81/166.28 2633 5 271 44.12/88.48 5413 1 1037 11.48/24.99 20049 场景2(nginx作为2个node.js服务器前面的负载平衡器): n【百万】请求/秒平均/最大【毫秒】请求 10 220 51.95/124.87 4512 5 431 27.79/152.93 8376 1 813 6.85/35.64 16156 --> ???
    我一直在挖。。。它可能与NGINX默认配置有关。效率不够高

    使用HTTP/1.1可以节省建立连接的开销 在nginx和node.js之间,具有每个代理请求,并具有 对响应延迟有显著影响

    因此,这可能是使用HTTP/1.0(NGINX默认值)的原因之一


    有趣的特点:

    将最大空闲保持连接数设置为上游 每个工作进程保留在缓存中的服务器


    资料来源:


    我一直在挖掘。。。它可能与NGINX默认配置有关。效率不够高

    使用HTTP/1.1可以节省建立连接的开销 在nginx和node.js之间,具有每个代理请求,并具有 对响应延迟有显著影响

    因此,这可能是使用HTTP/1.0(NGINX默认值)的原因之一


    有趣的特点:

    将最大空闲保持连接数设置为上游 每个工作进程保留在缓存中的服务器


    资料来源:


    您是否100%确定两个实例都在共享请求?粘性的situation@EMX是的,我在输出中添加了端口,并在浏览器中进行了测试。。。然后,启动wrkare您100%确定请求确实在两个实例之间共享吗?粘性的situation@EMX是的,我在输出中添加了端口,并在浏览器中进行了测试。。。然后,开始进行研究。我添加了keepalive 512;到proxy部分以及proxy_http_版本1.1;到nginx.conf,但吞吐量只是略微增加到950 req/s。通过查看CPU利用率,我发现有趣的是:运行测试大约10秒后,CPU利用率显著下降到接近零。在下降之前,对于涉及的2个核来说,利用率刚刚好。。。(将单个node.js实例的利用率提高了一倍)感谢您的研究。我添加了keepalive 512;到proxy部分以及proxy_http_版本1.1;到nginx.conf,但吞吐量只是略微增加到950 req/s。通过查看CPU利用率,我发现有趣的是:运行测试大约10秒后,CPU利用率显著下降到接近零。在下降之前,对于涉及的2个核来说,利用率刚刚好。。。(将单个node.js实例的利用率提高一倍) Scenario 1 (single node.js server): n [millions] req/s avg/max [ms] requests 10 134 87.81/166.28 2633 5 271 44.12/88.48 5413 1 1037 11.48/24.99 20049 Scenario 2 (nginx as load balancer in front of 2 node.js servers): n [millions] req/s avg/max [ms] requests 10 220 51.95/124.87 4512 5 431 27.79/152.93 8376 1 813 6.85/35.64 16156 --> ???