Use todos os cores da CPU com o modo de cluster
Um processo Node.js usa um só núcleo do CPU. Total.run({ cluster: N }) inicia um master que cria N processos worker, cada um a executar toda a sua aplicação, e o sistema operativo reparte entre eles as ligações recebidas ('auto' em vez de um número deixa o master acrescentar threads à medida que a carga aumenta). Execute-o em modo release (release: true, que o script de arranque gerado ativa com --release); o watcher do modo debug não foi pensado para um cluster. No script de arranque é uma única opção:
Total.run({ cluster: 4, release: true }); // or cluster: 'auto'Cada worker é um processo separado com a sua própria memória, por isso tudo o que guardar numa variável, em CACHE ou em MEMORIZE existe uma vez por worker e não é partilhado: dois pedidos do mesmo utilizador podem cair em workers diferentes. Guarde o estado partilhado numa base de dados, num armazenamento de ficheiros ou num serviço de mensagens, e mantenha as sessões num armazenamento que todos os workers consigam ler. As tarefas agendadas como CRON() também correm em cada worker, por isso proteja-as se só devem correr uma vez.
Verifique que todos os workers estão ativos. Após um deploy, peça várias vezes um URL como /pid/ abaixo e conte os ids distintos: devem ser tantos quantos os workers pedidos.
Cada trabalhador tem seu próprio ID de processo.O exemplo inicia dois trabalhadores e inclui esse ID na resposta.
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 });