在多核心服务器上启动多个节点实例的正确方法是什么?

问题描述:

我有一个nodejs应用程序,我想运行在一个多核(2CPU * 2Cores = 4Cores)服务器上。在阅读了关于这个主题的一堆SO线程后,我决定在4个不同的端口上启动4个独立的节点实例,并使用nginx在它们之间进行负载平衡。我决定在节点集群上使用这种方法。在多核心服务器上启动多个节点实例的正确方法是什么?

现在,这是我的问题。我真的很感激任何反馈:

  1. 是否有一个如何开始在2CPU 4个节点实例的任何差异* 2cores/CPU = 4核心服务器与1CPU * 4cores/CPU = 4core服务器。我不认为有任何区别,但只是想确认。

  2. 我有一个conf文件来启动我的服务。这个conf文件实际上是驻留在/ etc/init中并启动我的节点应用程序的脚本。我应该从这个1 conf文件启动4个实例还是应该创建4个conf文件并在每个conf文件启动一个实例? 同样,我觉得后一种方法更好,但想确认它。每个核心

+0

垂直缩放 - >正确的方法记录:https://nodejs.org/api/cluster.html#cluster_cluster希望这可以帮助其他人! – 2016-08-11 11:34:33

  1. 1实例是一个很好的经验法则,但如果您还运行在同一台服务器上的一些服务(数据库,Redis的,内存缓存,队列,...),你可能要开始所以这些不会为CPU“打”。

  2. 您最终将需要重新启动个别实例,因为一个实例崩溃,或者使用的内存太多,或者不是。因此,单独的脚本将是更可取的,甚至是允许您分别或一起控制实例的脚本(最初更多工作)。

+0

谢谢帕斯卡。我想你回答了我的第二个问题,但我仍然不确定回答我的第一个问题。你是说在我如何在2cpu * 2core服务器上启动4个实例与1cpu * 4cores服务器没有区别? – 2013-03-01 20:50:51

+0

是的,我不认为有任何区别。操作系统调度程序将负责在可用内核之间分配负载。 – 2013-03-01 21:37:08

你为什么决定:

  1. 使用nginx的负载平衡? haproxy是更好的解决方案。
  2. 手动启动n个进程,当有一个集群模块为您做到这一点?

    如果您启动n个不同的进程,您需要监听n个不同的端口。

    如果使用集群模块,则不需要任何负载平衡器,因为此作业是在内部完成的,并且n个工作人员将侦听相同的端口。如果工人死亡,您会收到通知,基本上您可以轻松管理它们。

所有的工人都可以打开/读/写/关闭同一个文件,你不需要n个配置文件。

+0

感谢加百列你的回答。正如我在我的问题中提到的,我知道集群模块,但是做了一些研究,决定开始在n个端口上侦听n模式实例。尽管如此,我还是会去看看HAProxy。 – 2013-03-03 01:56:22