Como Melhorar a Performance de Aplicações Node.js com Cluster

Ao implementar o módulo de cluster do Node.js, obtive 2,64 mais desempenho. Esse resultado foi INCRÍVEL!

Compreendendo o Cluster

O "Cluster" foi introduzido para escalar a execução de um aplicativo em vários núcleos de processador, criando processos de trabalho (workers). Cada worker opera como um processo Node.js independente, compartilhando a mesma porta de servidor e utilizando eficientemente os núcleos de CPU disponíveis. O processo primário gerencia os workers e distribui as solicitações de entrada utilizando a abordagem "ROUND-ROBIN".

Benefícios do Clustering:

Exemplo de uso: O exemplo abaixo foi desenvolvido com Node.js e framework Fastify.

Aplicação Node.js com Fastify utilizando Cluster

Neste exemplo, o processo primário cria processos de trabalho com base no número de núcleos de CPU disponíveis. Visualizar repositório exemplo no Github.

Aqui está uma análise do código:

  1. Importamos os módulos necessários, incluindo “cluster” e “os”.
  2. Definimos “port” através de “env.PORT”.
  3. Se o processo for primário, ele bifurca vários processos de trabalho iguais ao número de núcleos de CPU disponíveis.
  4. Se o processo de trabalho (worker) falhar, captamos o evento e criamos um novo processo automaticamente.

Comparando uso do Cluster com Teste de Carga:

O teste de carga avalia o desempenho de um aplicativo sob várias cargas de trabalho. Neste exemplo utilizaremos a biblioteca autocannon para realizar teste de carga e avaliar o desempenho.

Primeiro Passo: Criaremos um arquivo na raiz do projeto com o nome “bench.sh” e inseriremos os seguintes comandos:

Linhas de comandos da biblioteca autocannon

Segunda Passo:

Abriremos o terminal e executaremos o seguinte comando: bash bench.sh.

Neste exemplo, simulamos 500 conexões simultâneas durante 15 segundos, com 10 requisições em paralelo por conexão.

Resultado de teste de carga sem Cluster:

Sem Cluster, tivemos 409k de requests e com 135 erros.

Teste de carga sem cluster


Resultado de teste de carga com Cluster: Sem Cluster, tivemos 1080k de requests e com 0 erros.

Teste de carga com cluster


Conclusão:

Implementar o módulo de cluster no Node.js pode transformar significativamente o desempenho das suas aplicações, como evidenciado por um aumento de aproximadamente 2,64 vezes no desempenho em nossos testes. Esta melhoria notável destaca o potencial do cluster para maximizar a utilização dos recursos do sistema, distribuindo eficientemente a carga de trabalho entre múltiplos processos de trabalho.

Observação importante:

O uso do cluster irá depender muito do cenário atual da aplicação, talvez o ideal seja utilizar outras opções como kubernetes.

Gostou do Conteúdo?