O Node.js é uma plataforma popular para desenvolver aplicações escaláveis, mas sua arquitetura de thread única pode se tornar um gargalo em situações de alta carga. Para aproveitar ao máximo o poder do Node.js, a clusterização é uma técnica eficaz que permite utilizar múltiplos núcleos de CPU, melhorando o desempenho e a capacidade de resposta da sua aplicação.
Pré-requisitos
- Node.js instalado na sua máquina. Você pode baixar a versão mais recente em nodejs.
- Familiaridade básica com JavaScript e Node.js.
Passo 1: Criar um Novo Projeto Node.js
Primeiro, crie um novo diretório para o seu projeto e inicie um novo projeto Node.js:
mkdir node-cluster
cd node-cluster
npm init -y
Passo 2: Instalar Dependências
Para este tutorial, você precisará apenas do próprio Node.js, mas vamos usar o express para criar um servidor HTTP simples. Instale o express com o seguinte comando:
npm install express
Passo 3: Criar o Servidor com Clusterização
Crie um arquivo chamado server.js
e adicione o seguinte código:
const cluster = require('cluster');
const express = require('express');
const http = require('http');
const os = require('os');
const app = express();
const numCPUs = os.cpus().length;
// Middleware para simular processamento intenso
app.get('/', (req, res) => {
let sum = 0;
for (let i = 0; i < 1e7; i++) {
sum += i;
}
res.send(`Soma: ${sum}, Processado pelo Worker: ${process.pid}`);
});
// Lógica de clusterização
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Cria um worker para cada núcleo de CPU
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} morreu`);
});
} else {
// Cada worker escuta na mesma porta
const server = http.createServer(app);
server.listen(3000, () => {
console.log(`Worker ${process.pid} started`);
});
}
A configuração do cluster deve ser feita de acordo com a quantidade de CPUs disponíveis em sua máquina ou servidor. Por exemplo, se o seu servidor possui 6 CPUs, é ideal criar 6 workers para aproveitar ao máximo os recursos disponíveis. Utilizar mais workers do que núcleos de CPU pode levar a uma sobrecarga e diminuir o desempenho, enquanto usar menos workers pode resultar em subutilização dos recursos. É recomendável testar diferentes configurações para encontrar o equilíbrio ideal entre desempenho e utilização de recursos.
Passo 4: Executar a Aplicação
Agora você pode executar sua aplicação. Use o seguinte comando:
node server.js
Caso siga o exemplo voce verá em seu terminal algo semelheate a:
Master 12345 is running
Worker 12346 started
Worker 12347 started
Worker 12348 started
Passo 5: Teste a Aplicação
Para testar a rota /
do seu servidor local utilizando curl
, você pode usar o seguinte comando:
curl http://localhost:3000/
Ao executar o comando acima no terminal, você deve receber uma resposta similar a esta:
Soma: 49999995000000, Processado pelo Worker: 12348