Ho un server NodeJS (Express) e sto diffondendo le richieste a più processori utilizzando l'esempio del modulo cluster sul sito nodeJs.Come aumentare la velocità effettiva su un server NodeJS utilizzando il cluster?
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
};
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
cluster.fork();
});
} else {
server.listen(app.get('port'), function(){
console.log('HTTP server on port ' + app.get('port') + ' - running as ' + app.settings.env);
});
// setup socket.io communication
io.sockets.on('connection', require('./app/sockets'));
io.sockets.on('connection', require('./app/downloadSockets'));
}
Il problema è che il punto di riferimento da dell'assedio mi dimostra che non v'è alcun aumento del numero di colpi. Questa è l'uscita d'assedio:
$ siege -c100 192.168.111.1:42424 -t10S
** SIEGE 3.0.5
** Preparing 100 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 1892 hits
Availability: 100.00 %
Elapsed time: 10.01 secs
Data transferred: 9.36 MB
Response time: 0.01 secs
Transaction rate: 189.01 trans/sec
Throughput: 0.93 MB/sec
Concurrency: 1.58
Successful transactions: 1892
Failed transactions: 0
Longest transaction: 0.05
Shortest transaction: 0.00
Dopo Clustering:
$ siege -c100 192.168.111.1:42424 -t10S
** SIEGE 3.0.5
** Preparing 100 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 1884 hits
Availability: 100.00 %
Elapsed time: 9.52 secs
Data transferred: 9.32 MB
Response time: 0.01 secs
Transaction rate: 197.90 trans/sec
Throughput: 0.98 MB/sec
Concurrency: 1.72
Successful transactions: 1884
Failed transactions: 0
Longest transaction: 0.07
Shortest transaction: 0.00
Significa che il mio server sta già ottenendo un throughput massimo, con il singolo server, probabilmente perché la sua una macchina locale o forse La sua non è in grado di ottenere 4 processori in quanto ci sono troppi processi in esecuzione, non sono sicuro.
Come utilizzare il modulo cluster per aumentare il throghput e perché il mio codice corrente non si verifica? Inoltre ho controllato che effettivamente crea 4 istanze del server in cui funziona il cluster.fork. Qualsiasi suggerimento sarebbe molto utile.
sei limitato dal tuo hardware. – Mox
@Mox Questo è quello che penso anch'io, ma dal momento che utilizzo un solo processore in un caso e tutti gli altri nel secondo caso, suppongo che io sottovaluti il mio hardware nel primo caso quindi dovrei ottenere un throughput migliore a meno che il collo di bottiglia non sia altrove. Non sei sicuro di come trovare quel collo di bottiglia –
Hai più di una CPU nel tuo sistema? Il clustering funziona sull'avvio di un nuovo processo per ogni CPU trovata, se si dispone di un solo clustering è inutile. –