[英]The Node.js event loop - nginx/apache
nginx和Node.js都有事件循环来处理请求。 我把nginx放在Node.js前面,就像这里推荐的那样
仅使用Node.js与使用Apache / Nginx的Node.js
使用此处显示的设置
两个事件循环如何一起玩? 两者之间是否存在冲突风险? 我想知道因为Nginx可能无法每秒处理与Node.js一样多的事件,反之亦然。 例如,如果Nginx每秒可以处理1000个事件但node.js只能处理500个,那么这不会导致问题吗? (我不知道1000,500是否是合理的数量级,你可以纠正我。)
把Apache放在Node.js面前怎么样? Apache没有事件循环。 只是线程。 所以不会把Apache放在Node.js前面打败目的吗?
在2010年的演讲中 ,Node.js的创建者Ryan Dahl有望彻底摆脱nginx / apache /无论是什么,让节点直接与互联网对话。 你觉得什么时候会成为现实?
nginx和Node都使用异步和事件驱动的方法。 他们之间的沟通或多或少会像这样:
您正在询问如果nginx和Node可以处理不同数量的最大连接会发生什么。 它们实际上没有最大值,最大值通常来自操作系统配置,例如系统可以一次打开的最大打开句柄数或CPU吞吐量。 所以你的问题并不适用。 如果系统配置正确且所有进程都受I / O限制,则nginx或Node都不会阻塞。
将Apache置于Node之前只有在您可以保证Apache永远不会阻塞(即它永远不会达到其最大连接限制)时才能正常工作。 对于大量连接来说,这很难/不可能实现,因为Apache为每个连接使用单独的进程或线程。 nginx和Node规模确实很好,Apache没有。
前面没有其他服务器的运行节点工作正常,对于小型/中型负载站点应该没问题。 将Web服务器放在其前面的原因是首选的是像nginx这样的Web服务器具有Node没有的功能,您需要自己实现。 诸如缓存,负载平衡,从同一服务器运行多个应用程序等等。
我认为你的问题在很大程度上已经被其他一些答案所覆盖了,但是有一些部分缺失,有些部分我不同意,所以这里是我的:
事件循环在进程级别彼此隔离,但确实相互作用。 您最有可能遇到的问题是nginx响应缓冲区,分块数据等的配置,但这是优化而不是错误解决方案。
正如您所指出的,如果您使用Apache,那么您将无效使用Node.js,即大规模并发和websockets。 我不建议这样做。
人们已经在他们的堆栈前面使用Node.js. 搜索基准测试会在Node中获得一些看似合理的结果 ,因此我认为性能不是问题。 但是,仍然有理由将Nginx放在Node之前。
安全性 - 节点已经受到越来越多的关注,但它仍然很年轻。 你可能没有问题,但谨慎通常是你的朋友。
培训 - 您雇佣的Ops员工将知道如何管理Nginx,但您的开发人员成功传达的人员只能理解您的自定义Node应用程序的配置和管理。 在一些公司,这是没有人。
操作灵活性 - 如果达到规模,您可能希望拆分静态内容的服务,纯粹是为了减少应用服务器的负载。 您可能希望在不同域之间拆分内容并将其单独管理,或者针对不同的域或URL模式具有不同的SSL或代理行为。 这些是Ops家伙在Nginx中轻松配置的东西,但您必须在Node应用程序中手动编码。
事件循环是独立的。 事件循环在应用程序级别实现,因此既不关心另一个使用的架构。
NodeJS很擅长很多东西,但有些地方仍然存在动摇。 一旦示例提供静态文件。 目前,nodejs在此测试中的表现相当差,因此为静态文件配备专用的Web服务器可以大大缩短响应时间。 此外,nodejs仍处于起步阶段,并且在nginX上的Apache等安全问题上尚未经过“测试和强化”。
人们需要花费很长时间才能自己考虑将nodejs全部考虑在内。 群集模块是向正确方向迈出的一步,但即使在它发生之前达到v1也需要很长时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.