Может ли этот кластерный 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);
}