我针对具有不同配置的 node.js 进行了测试ab -n 10000 -c 1000
,每个配置都返回字符串Hello World!
。结果对我来说似乎很奇怪。
X 轴是请求数,y 轴是响应时间(以毫秒为单位)。
- 节点服务器是否单独
- 节点(集群)是使用该模块的服务器
cluster
(两个核心) - Nginx (均衡器)在运行相同代码的(两个)节点实例前充当平衡器
首先,nginx 作为均衡器太慢了,它是三者中结果最差的。只有在 1000 个请求之前,它比单独的节点要好(但比集群慢)。另一个奇怪的事情是,单独的节点的响应时间一直到 ~7000(?)。从 ~7000 个请求开始,集群的响应时间大于节点,这似乎太奇怪了。
您如何解释这些结果?我做错了吗(实验台或绘图错误)?
ApacheBench 2.3 (1430300)、Node.js 0.10.5、nginx 1.4.1。在 Xubuntu 13.04 x64 上运行。
答案1
这是解释的问题。你没有做错什么。以下是我对图表的解释。这是 x vs y 的分布图,其中:
- y 是响应时间(以毫秒为单位),
- x 是累计 y 毫秒内返回的请求数。
根据节点(单独)请求分布的语句将是:
- 10000 个请求中有 7000 个在约 14 毫秒内返回
- 剩余 3000 个请求中有 2000 个在 14-18 毫秒内返回
- 剩余 1000 个请求中有 800 个在 18-22 毫秒内返回
- 其余 200 个在 35 毫秒内返回
但累积分析的话则会是:
- 10000 个请求中有 7000 个在 14 毫秒内返回
- 10000 个请求中有 9000 个在 18 毫秒内返回
- 10000 个请求中有 9800 个在 22 毫秒内返回
- 全部在 35 毫秒内返回
正如预期的那样,集群配置将显示比单个节点更快的结果。
对于 nginx 结果,处理/负载平衡将有一个固定的延迟量。从图中可以看出,延迟量约为 9-10 毫秒,这是预期的。这并不意味着 nginx 配置性能不佳。它确实在 30 毫秒内返回大多数请求(与其他配置差别不大)。
您在 Apache Bench 中将并发请求设置为 1000,这不需要进行太多的负载平衡,因为即使是单个节点也可以轻松处理那么多负载。提供更多并发连接/每个请求的更繁重处理将使单个节点的图表膨胀(请求数量较少时它会提前上升)。Nginx 牺牲了一些处理时间以允许处理更多并发请求,同时仍保持合理的响应时间。