3

我开始使用 node.js 构建一个轻量级、高需求的 REST 平台来构建一些内部应用程序。一个问题与我的开发环境以及 Apache 和 node.js 共存有关。让它们共存没有问题,因为有很多关于如何通过让 Apache 将请求重定向到节点来“共享”端口 80 的帖子:

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/ http://www.readwriteweb.com/hack/2010/12/how-to-run- apache-and-nodejs.php

和节点代理到 Apache:

https://github.com/nodejitsu/node-http-proxy

然而,一个似乎想要解决的问题与代理时的性能“命中”有关,特别是在使用 Apache 代理节点时。虽然我的生产环境将是一个纯 node.js 解决方案,侦听端口 80,但理论上不会让 Apache 介入并处理初始 I/O,这几乎会破坏使用 node.js 的大部分性能优势,从我/O 视角?如果此框收到数千个请求、长轮询等,Apache 重定向是否不会产生许多线程,然后传递给单线程 node.js?

正如我所说,对 node 来说是新手,所以只是试图让我的头脑围绕这个问题向前发展。

4

1 回答 1

0

你的基本想法是对的。

让 Apache 处理请求首先使其成为链的一部分,如果它是链中最薄弱的环节,它可能会减慢您的应用程序。

在标准配置中,如果并发请求的数量很少,Apache 并不慢,但是处理的请求越多,Apache 使用的 RAM 就越多。如果您使用一些持久连接,您可以轻松地达到一些限制。

Apache 有不同的 MPM(多处理模块)。默认情况下,它使用mpm_prefork已知的内存消耗量(每个连接一个线程)。
您可以切换到mpm_worker使用与 node.js 类似的模型来处理连接更适合您尝试归档的任务类型。(事件连接处理,但它与其他模块 [like mod_php] 有一些怪癖,不再是线程安全的。)

与往常一样,最好的解决方案是:尝试不同的东西,做一些基准测试,然后选择最适合你的。

于 2012-06-12T11:47:20.803 回答