是否有任何更快的基准测试或比较:将nginx放在node前面,让它直接提供静态文件,还是仅使用node并使用它提供静态文件?
Nginx解决方案对我来说似乎更易于管理,有什么想法吗?
Answers:
我不得不不同意这里的答案。尽管Node可以正常运行,但是如果配置正确,nginx肯定会更快。nginx以相似的模式(仅在需要时返回连接)以很小的内存占用量在C中高效实现。而且,它支持sendfile syscall来服务那些文件,这与服务文件时所获得的速度一样快,因为完成工作的是OS内核本身。
到目前为止,nginx已经成为事实上的前端服务器标准。您可以在以后提供静态文件,gzip,SSL甚至负载平衡时使用它来提高性能。
PS:这假设文件在请求时实际上是“静态的”,就像磁盘上的静态文件一样。
sendfile
-但似乎您必须编写一些代码,请参见例如。blog.std.in/2010/09/09/using-sendfile-with-nodejs
我快速地ab -n 10000 -c 100
处理了一个静态的1406字节favicon.ico
,比较了nginx,Express.js(静态中间件)和集群的Express.js。希望这可以帮助:
不幸的是,我无法测试1000个甚至10000个并发请求,因为在我的机器上,nginx会开始抛出错误。
编辑:如artvolk所建议,这是集群+ static
中间件的结果(较慢):
static
中间件将在生产中使用。
我对@gremo的图表有不同的解释。在我看来,节点和Nginx都可以在相同数量的请求(9-10k之间)范围内扩展。确保nginx响应的延迟降低了恒定的20ms,但我认为用户不一定会意识到这种差异(如果您的应用程序构建良好)。在给定固定数量的机器的情况下,考虑到该节点首先要承担的大部分负载,在将节点机器转换为nginx之前,将需要相当多的负载。一个与之相对的观点是,您是否已经将一台机器专用于nginx来进行负载平衡。如果是这种情况,那么您也可以让它同时提供静态内容。
这是一个棘手的问题。如果您编写了一个真正的轻量级节点服务器来仅提供静态文件,则它的性能可能会比nginx更好,但并不是那么简单。(这是一个比较基准,比较nodejs文件服务器和lighttpd-在提供静态文件时的性能与ngingx相似)。
服务静态文件的性能通常不仅仅取决于网络服务器。如果您希望获得最高的性能,则将使用CDN来提供文件,以减少最终用户的延迟,并从边缘缓存中受益。
如果您不必担心,那么在大多数情况下,node都可以提供静态文件。节点使自己适合异步代码,因为它是单线程的,任何阻塞的I / O都会阻塞整个过程,并降低应用程序性能,因此它也依赖于异步代码。您很有可能以非阻塞方式编写代码,但是如果您同步执行任何操作,则可能导致阻塞,这将降低其他客户端获取其静态文件的速度。一种简单的解决方案是不编写阻塞代码,但这有时是不可能的,或者您不能总是强制执行它。
我敢肯定,纯粹的node.js在很多方面都可以胜过Nginx。
所有人都说我必须留下NginX具有内置缓存,而node.js并未随工厂安装(您必须建立自己的文件缓存)。自定义文件缓存的性能非常简单,其性能优于nginx和市场上的任何其他服务器。
Nginx也在多个内核上运行。要充分利用Node的潜力,必须对节点服务器进行群集。如果您有兴趣知道如何操作,请下午。
您需要深入挖掘以实现节点性能,这是唯一的问题。一旦完成,是的...击败Nginx。