Node.js 使用nginx作为负载平衡器的意外测试结果
我正在使用以下场景对nginx/node.js拓扑进行基准测试: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
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(默认)工作线程连接(增加不会改变结果)
我一直在挖。。。它可能与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 --> ???