多核系统上的Node.js群集

时间:2016-08-30 07:38:08

标签: node.js

目前,我在node.js个应用上使用群集模块,以防止应用在unhandledExcpetion上崩溃和退出。但是,我发现这段代码据称可以利用多核系统

const cluster = require('cluster');
const http = require('http');

if (cluster.isMaster) {
    for (var i = 0; i < require('os').cpus().length; i++) {
        cluster.fork();
    }
    cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} died`);
    });
} else {
    http.createServer((req, res) => {
        res.writeHead(200);
        res.end('hello world\n');
    }).listen(3008);
}

问题:

  • 这有什么好处吗?
  • 它是否处理负载平衡?
  • 如果它进行了一些负载平衡,它与通过NGINX进行负载平衡相比如何?
  • 有没有反对这个的论据?

注意:我试图查看这种技术,以避免提出多余的问题,但说实话,我不知道要搜索什么,因为我不知道这种技术的用途是什么

1 个答案:

答案 0 :(得分:0)

首先,我建议您在exit上填写新流程。

cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
    console.log('Starting new process.....Since a worker died')
    cluster.fork();//new process.
});

因此集群允许所有进程共享同一个端口。

  1. 是的,它有好处,因为它利用了所有可用的核心 机。
  2. 是的,它在群集中以循环方式进行负载均衡 流程。
  3. Nginx允许您在多个服务器之间进行平衡 不同的机器或端口)。
  4. 见下文。
  5.   

    例如,假设您有4台机器,每台机器有4台机器   核心。您可以做的是在群集中的这4台机器上运行4台服务器   mode.This将为您提供多个内部级别的负载平衡   使用nginx时核心将提供外层负载平衡   在这些机器中。

    仍然(最后2个问题)网上有很多讨论和论点。 see here