单个服务器上的多个Nodej实例

时间:2015-12-31 22:28:57

标签: node.js

在我的设置中,我在haproxy后面运行节点js,使用haproxy作为反向代理和负载均衡器,它将把呼叫路由到我运行的多个节点服务器。在每个节点服务器上,我运行多个独立的节点进程,如下所示:

PORT = 3000永远启动app1 / app.js

PORT = 3001永远启动app2 / app.js

PORT = 3002永远启动app3 / app.js

等...

现在,在每台服务器上,我正在安装我的应用程序的多个实例,并永久地手动启动这些进程。我的问题是,我如何自动启动这些进程,因为它们可以在每台服务器上有所不同,因为我将在每台服务器上运行(numOfCpus -1)进程?

另外,如果我想在服务器1上运行同一个应用程序的10个nodejs进程,我是否需要在10个单独的文件夹中安装该应用程序,或者我可以将其安装在一个文件夹中,因为它的代码相同,并以某种方式有10个单独的实例运行?

令我感到震惊的是,如果您不想使用群集模式,这是在生产中运行节点的一种基本方式,但是没有关于如何实现此目的的文档或材料。

1 个答案:

答案 0 :(得分:1)

一种可能的方法是fork子进程与主进程分离,因此子进程不会因主进程而死。

在主进程中,您可以编写代码以在不同端口上启动多个子进程,然后另外编写代码以使用ps等操作系统进程命令来监视正在运行的进程的运行状况。您可以分析vtop npm的源代码,它使用这些命令来显示正在运行的进程和CPU使用情况的统计信息。此外,您可以优化主进程的代码,以便它不一定启动子进程,如果它们被另一个主进程启动。

你可以在setTimeInterval(vtop npm所做的)下面做类似的事情:

child_process.exec('ps -ewwwo %cpu,%mem,comm', function (error, stdout, stderr) { 
//parse stdout to extract health of your process
});

fork分离子进程的代码片段:

var spawn = require('child_process').spawn;

var child = spawn('forever', ['start', 'app.js'], {
  detached: true,
  stdio: [ 'ignore', out, err ]
});

child.unref();