Может ли этот кластерный NodeJS мастер класть сбой?

Мы использовали forever запустить наше приложение Express, которое использует cluster порождать рабочих, которые делают всю работу. Это означает, что мастер только выполняет этот код:

if (cluster.isMaster) {

    // ...
    // ... check arguments and do some initial prep 
    // ...

    // Create a worker for each CPU
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }

    // Listen for dying workers
    cluster.on('exit', function (worker) {
        if (!worker.suicide) {
            // Replace the dead worker if not a startup error like port in use.
            console.log('Worker ' + worker.id + ' died. Replacing it.');
            cluster.fork();
        }
    });
    return;
}

Учитывая, что мастер на самом деле ничего не делает, есть ли необходимость "защищать" его forever, supervisor, так далее? Есть ли ситуации, в которых мастер может потерпеть крах, и будет полезно автоматически перезапустить его?

1 ответ

Решение

На мой взгляд, нет необходимости контролировать главный процесс в вашем кластере, потому что вы не сможете справиться SIGKILL,

Ссылаться на PM2 реализация, как показано ниже, master на самом деле.

var cluster = require('cluster');  
var http    = require('http');  
var os      = require('os');

var numCPUs = os.cpus().length;

if (cluster.isMaster) {  
  // Master:
  // Let's fork as many workers as you have CPU cores

  for (var i = 0; i < numCPUs; ++i) {
    cluster.fork();
  }
} else {
  // Worker:
  // Let's spawn a HTTP server
  // (Workers can share any TCP connection.
  //  In this case its a HTTP server)

  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world");
  }).listen(8080);
}
Другие вопросы по тегам