每个网站都应该有自己的“node.js”进程吗

每个网站都应该有自己的“node.js”进程吗,node.js,load-balancing,Node.js,Load Balancing,我们拥有大约150个网站(可能扩展到300+),我们正在考虑迁移到node.js。大多数网站的流量都相当低这里有很多问题。总的来说,答案是,这取决于。。。当你把整个“绩效”讨论带进来时,它总是这样。话虽如此,建立一个可靠节点的最简单方法是注意以下关于NodeJ的基本事实,我还将对它们的含义进行评论,因为它们与您的问题有关 在某些情况下,节点的并发性非常好,即IO繁重的操作。我们在这里真正讨论的是最小化等待下一个请求的停机时间。正因为如此,节点在机器上每个核心有一个进程的环境中工作得非常好。No

我们拥有大约150个网站(可能扩展到300+),我们正在考虑迁移到
node.js
。大多数网站的流量都相当低这里有很多问题。总的来说,答案是,这取决于。。。当你把整个“绩效”讨论带进来时,它总是这样。话虽如此,建立一个可靠节点的最简单方法是注意以下关于NodeJ的基本事实,我还将对它们的含义进行评论,因为它们与您的问题有关

  • 在某些情况下,节点的并发性非常好,即IO繁重的操作。我们在这里真正讨论的是最小化等待下一个请求的停机时间。正因为如此,节点在机器上每个核心有一个进程的环境中工作得非常好。Node在最大化可用于在重负载下服务请求的CPU数量方面做得非常好。这就是说,如果在偶数循环中几乎没有其他工作在进行,那么通过每个核心有多个节点进程,您可以看到性能的轻微提高(以最大请求/秒/处理器核心为单位)。但是,我从来没有看到过将这个数字增加到3之后有什么好处。即使在整个事件循环实际上只是一个文件服务器的情况下

  • 关于每个站点的流程评论。这是一个坏主意,原因很多。首先,一个整合良好的节点服务器每秒可以处理数千个请求。我们(公司名称略)的服务器通过AmazonEC2托管在中型集群上(大量ram、中CPU时钟、4个内核),通常每个集群每秒失败3000个请求。我们的服务器做了相当多的CPU工作,对于简单的文件服务器,我相信您可以做得更好。严格地说,当然,每个站点都可以通过在自己的流程/核心/快速升级中启动每个站点来满足更多请求!但从架构的成本和过于复杂的角度来看,这是不必要的。我的建议是,投资于具有大量RAM的设置。服务器缓存经常请求的文件的能力将比为给定机器启动大量进程对性能的影响更大

  • 关于公羊的事。要为给定核心启动的进程数取决于两个因素。一个是在事件循环中完成了多少同步工作。同步工作越多,给定请求进入和事件循环准备处理下一个请求之间的时间就越长。如果您有一个忙事件循环,您将处于需要更多进程/CPU核心的情况。另一个可能影响这一点的因素,尤其是与文件服务器相关的因素是RAM的数量。Node在高ram环境中运行得更好,但对于任何文件服务器,您都可以这样说。。。这与活动异步操作的数量有关。节点工作方式的一个缺点是,在重载情况下,可以一次激活大量事件处理程序。这对于并发性/简单性来说是非常好的,但是,如果您的服务器忙于等待大量异步磁盘/IO的发生,那么它将比您有大量RAM时慢得多,崩溃得更快。如果您没有足够的RAM来处理所有这些事件处理程序,您将希望保持1进程/核心的安排。否则,节点更容易同时启动多个事件处理程序,并且再次导致崩溃的速度比其他情况更快


我没有足够的信息告诉你该怎么做。这完全取决于特定服务器的体系结构、站点、站点大小、数据量。。。但这三项知识是帮助您充分利用节点服务器的基本知识。老实说,您关于负载平衡的想法与上面的考虑因素相结合,应该对您有好处。当然,微优化是可能的,但是如果你做了这些事情,在你开始因为DDOS类型的情况而崩溃之前,你应该很容易看到每秒数千次的请求。

不,不要这样做。保持简单!然后退房

几百个过程与你失去的简单性相比根本算不了什么。在如此多的层次上,让一个节点进程为多个站点(或“逻辑应用单元”)提供服务将是一个可怕的决定


如果您要问这个问题,您可能希望在“迁移”到节点之前对节点进行更多的探索。节点中的错误处理和关注点分离比其他情况下更复杂。具体来说,
集群
API都不成熟。但实际上,您违反的是干净、简单的应用程序部署理念。我可以继续讲下去。

感谢您的详细评论。如果它有助于澄清这些应用不需要是尖端的高性能。每个站点一个进程的原因不是为了性能,而是为了在不影响其他站点的情况下处理容错和更新代码等问题。我更愿意按照您的建议在每个核心上运行几个进程,但是当我这样做时,我该如何处理我的两个问题呢?此外,计划是让所有静态文件请求都通过Nginx、Varnish或类似的东西。节点不应该为这些提供服务。首先,良好的错误处理,这是给定的。但是,作为一个后备方案,你可以研究这样的模块:或者,如果你喜欢一个给定站点的流程的想法:“每个站点一个流程的原因不是为了性能,而是为了在不影响其他站点的情况下处理容错和更新代码等问题。”@ChrisCM,我对此很感兴趣。我的理想方案是每个站点有一个进程。我想问的是这样做有问题吗。我是否会因为在一个s上有200多个进程而引入大量的开销