为大量的出站HTTP请求优化Node.js?

当node.js服务器变慢或无响应时,我的node.js服务器会遇到这种情况,即使尝试连接服务器时偶尔也会导致503个网关超时。

我99%肯定(基于我已经运行的testing),这个滞后来自于我使用node-oauth模块与外部API(Facebook,Twitter等等)联系的大量出站请求。 无可否认,出站请求的数量相对较大(大约每分钟30个左右)。 更糟的是,这通常意味着相应的入站请求到我的服务器可能需要5-10秒才能完成。 不过,我有一个以前用PHP编写的API版本,它能够处理这个数量的出站请求,没有任何问题。 实际上,使用我的Node.js API的相同数量(甚至更less)的请求的CPU使用率大约是我的PHP API的5倍。

所以,我试图找出可以改进的地方,最重要的是要确保不会发生503次超时。 这里有一些我已经阅读或尝试过的东西:

  • 本文(由LinkedIn)build议closures套接字池。 但是,当我联系stream行的nodejs-request模块的作者时 ,他的回答是,这是一个非常糟糕的主意。
  • 我听说它说,设置“http.globalAgent.maxSockets”大量可以帮助,事实上它似乎减less了瓶颈

我可以继续,但总之,我已经能够find关于如何优化性能的极less的明确信息,所以这些出站连接不会滞后于来自客户端的入站请求。

提前感谢您的任何想法或贡献。

FWIW,我也使用express和mongoose,而且我的服务器托pipe在Amazon Cloud上(2个M1.Large用于节点服务器,2个负载均衡器和3个M1.Small MongoDB实例)。

在我看来,代理将您的请求限制在每个主机的默认级别5。 你的testing表明,启动代理的maxSockets帮助…你应该这样做。

您可以通过启动一个数据包嗅探器,或者向应用程序添加更多debugging代码来certificate这是个问题,以显示这是限制因素。