Criando Clusterização em Aplicações Node.js

Kaue Campos - Oct 31 - - Dev Community

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
Enter fullscreen mode Exit fullscreen mode
cd node-cluster
Enter fullscreen mode Exit fullscreen mode
npm init -y
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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`);
  });
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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/
Enter fullscreen mode Exit fullscreen mode

Ao executar o comando acima no terminal, você deve receber uma resposta similar a esta:

Soma: 49999995000000, Processado pelo Worker: 12348
Enter fullscreen mode Exit fullscreen mode
. .
Terabox Video Player