Utilizzare tutti i core CPU con il modo cluster
Un processo Node.js usa un solo core della CPU. Total.run({ cluster: N }) avvia un master che crea N processi worker, ciascuno con l'intera applicazione, e il sistema operativo ripartisce tra loro le connessioni in arrivo ('auto' al posto di un numero lascia che il master aggiunga thread al crescere del carico). Eseguilo in modalità release (release: true, che lo script di avvio generato attiva con --release); il watcher della modalità debug non è pensato per un cluster. Nello script di avvio è una sola opzione:
Total.run({ cluster: 4, release: true }); // or cluster: 'auto'Ogni worker è un processo separato con la propria memoria, quindi tutto ciò che tieni in una variabile, in CACHE o in MEMORIZE esiste una volta per worker e non è condiviso: due richieste dello stesso utente possono finire su worker diversi. Tieni lo stato condiviso in un database, in un archivio di file o in un servizio di messaggi, e conserva le sessioni in un archivio che tutti i worker possano leggere. Anche le attività pianificate come CRON() girano in ogni worker, quindi proteggile se devono essere eseguite una sola volta.
Controlla che tutti i worker siano attivi. Dopo un deploy, richiedi più volte un URL come /pid/ qui sotto e conta gli id distinti: devono essere tanti quanti i worker richiesti.
Ogni lavoratore ha il proprio ID di processo.L'esempio inizia con due lavoratori e include questo ID nella risposta.
exports.install = function() {
ROUTE('GET /pid/', pid);
ROUTE('GET /dir/', dir);
};
function pid($) {
$.json({ pid: process.pid });
}
function dir($) {
$.json({ dir: PATH.root() });
}require('total5');
Total.run({ cluster: 2, port: 8766, release: true });