我在以下场景中对 nginx/node.js 拓扑进行基准测试:
- 直接对单个 node.js 服务器进行基准测试
- nginx 后面的基准测试 2 node.js 服务器(RR 负载平衡)
对于这两个基准,“wrk”与以下配置一起使用:
wrk -t12 -c20 -d20s --timeout 2s
所有 node.js 实例都是相同的。在每个 http GET 请求上,它们迭代给定的数字“n”并在每个循环中增加一个变量。
当我执行测试用例时,我得到了下面概述的有些令人惊讶的结果。我不明白,为什么双 node.js 设置(拓扑 2)在 100 万次迭代中表现更差 - 它甚至比拓扑 1 上的相同 100 万次循环更差。
1037 req/s(单次)与 813 req/s (LB)
我当然希望有一点开销,因为单个操作在 node.js 实例前面没有 nginx - 但测试结果看起来真的很奇怪。
具有 10 和 500 万次迭代的调用似乎运行良好,因为吞吐量的增加符合预期。
这种行为有合理的解释吗?
测试在单台计算机上执行;每个 node.js 实例都在侦听不同的端口。
Nginx 使用标准配置,除了:
- 端口 80
- 2个上游服务器
- proxy_pass 在“/”路由上
- 1024(默认)Worker_connections(增加不改变结果)
场景 1(单个 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 --> ???