2017-04-07 1 views
0

Ich benutze Cluster-Modul mit node.js, um von mehreren CPU-Kernen (4 in meinem Fall) zu profitieren. Das Problem ist, dass, wenn ein Mitarbeiter beschäftigt ist, die nächste Anfrage nur nach ungefähr 10 Sekunden an einen anderen verfügbaren Mitarbeiter delegiert wird, was nicht akzeptabel ist. Ich bin eine Endlosschleife mit dem Cluster zu testen, wie folgt:Knoten js - Cluster Verzögerung vor dem Delegieren der Anfrage

var cluster = require ('cluster'); 

if (cluster.isMaster) { 
    var cpuCount = require('os').cpus().length; 
    for (var i = 0; i < cpuCount-1; ++i) { 
     cluster.fork(); 
    } 
} else { 
    var express = require('express'); 
    var app = express(); 

    app.get('/', function (req, res) { 
     console.log('Served by worker %d!', cluster.worker.id); 
     while(true) {} 
     console.log("done"); 
     res.status(200).send(); 
    }); 

    app.listen(8080, function() { 
     console.log('Worker %d running!', cluster.worker.id); 
    }); 
} 

cluster.on('exit', function (worker) { 
    console.log('Worker %d died :(', worker.id); 
    cluster.fork(); 
}); 

Zuerst öffne ich localhost: 8080 in Browser, und melden Nachricht „Serviert von worker 1“ wird sofort gedruckt. Dann öffne ich die gleiche Seite in einem neuen Tab, und erst nach 10 Sekunden wird der "Served by worker 2" gedruckt. Warum ist das so, und wie würde ich die Anforderung erhalten, sofort an einen verfügbaren Mitarbeiter delegiert zu werden?

+0

Meine Vermutung ist, dass 'cluster' auf den Master- und Child-Prozess angewiesen ist, um miteinander kommunizieren zu können. Wenn Sie die untergeordneten Prozesse vollständig mit einer Endlosschleife blockieren, wird diese Kommunikation effektiv blockiert. – robertklep

Antwort

0

Welchen Kern führt die load-balancer Methode? Vielleicht ist der Balancer wegen Endlosschleife zu beschäftigt, um die Anfrage an die andere App zu senden.

in der Tat ein for..loop arbeitet synchron und wenn load-balancer Verfahren in der gleichen App ist und der Kern mit der loop dann die Lastverteilungs-funktioniert nie, wenn es eine Unendlich-Schleife ist.

Ich empfehle dringend die Verwendung von , um einen Cluster zu erstellen. Eine Bibliothek, die seit Jahren entwickelt wurde, bietet viel mehr als Ihre Erwartungen.

Viel Glück ..

+0

Danke für den Hinweis! Pm2 ist jedoch unter der AGPL lizensiert. Ist das eine Einschränkung für eine kommerzielle Software? Ich bevorzuge generell MIT/BSD lizensierte Bibliotheken. – eko

Verwandte Themen