{"id":68501,"date":"2024-05-27T04:39:54","date_gmt":"2024-05-27T07:39:54","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=68501&#038;preview=true&#038;preview_id=68501"},"modified":"2024-05-31T06:18:49","modified_gmt":"2024-05-31T09:18:49","slug":"clustering-node-js","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/","title":{"rendered":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados"},"content":{"rendered":"<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a> \u00e9 um <a href=\"https:\/\/kinsta.com\/pt\/blog\/deno-vs-node-js\/\">runtime JavaScript<\/a> do lado do servidor que usa um modelo de entrada e sa\u00edda (I\/O) orientado por eventos e sem bloqueio. \u00c9 amplamente reconhecido por criar aplicativos web r\u00e1pidos e escal\u00e1veis. Al\u00e9m disso, possui uma grande comunidade e uma vasta biblioteca de m\u00f3dulos que simplificam diversas tarefas e processos.<\/p>\n<p>O clustering aprimora o desempenho dos <a href=\"https:\/\/kinsta.com\/pt\/blog\/aplicativos-node-js\/\">aplicativos Node.js<\/a>, permitindo que eles sejam executados em v\u00e1rios processos. Essa t\u00e9cnica permite que eles usem todo o potencial de um sistema com v\u00e1rios n\u00facleos.<\/p>\n<p>Este artigo oferece uma an\u00e1lise abrangente sobre clustering no Node.js e como ele impacta o desempenho de um aplicativo.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que \u00e9 clustering?<\/h2>\n<p>Por padr\u00e3o, os aplicativos Node.js s\u00e3o executados em um \u00fanico thread. Essa caracter\u00edstica de thread \u00fanico significa que o Node.js n\u00e3o pode utilizar todos os n\u00facleos em um sistema com m\u00faltiplos n\u00facleos, como \u00e9 o caso da maioria dos sistemas atuais.<\/p>\n<p>O Node.js ainda pode lidar com v\u00e1rias solicita\u00e7\u00f5es simultaneamente, aproveitando as opera\u00e7\u00f5es de (I\/O) sem bloqueio e as t\u00e9cnicas de programa\u00e7\u00e3o ass\u00edncrona.<\/p>\n<p>Entretanto, tarefas computacionais pesadas podem bloquear o loop de eventos e fazer com que o aplicativo deixe de responder. Para resolver isso, o Node.js inclui um m\u00f3dulo de cluster nativo que, apesar de sua natureza de thread \u00fanico, permite aproveitar todo o poder de processamento de um sistema com m\u00faltiplos n\u00facleos.<\/p>\n<p>A execu\u00e7\u00e3o de v\u00e1rios processos aproveita o poder de processamento de v\u00e1rios n\u00facleos da unidade central de processamento (CPU) para permitir o processamento paralelo, reduzir os tempos de resposta e aumentar a taxa de transfer\u00eancia. Isso, por sua vez, melhora o desempenho e o dimensionamento dos aplicativos Node.js.<\/p>\n<h3>Como funciona o clustering?<\/h3>\n<p>O <a href=\"https:\/\/nodejs.org\/api\/cluster.html\">m\u00f3dulo de cluster do Node.js<\/a> permite que um aplicativo Node.js crie um cluster de processos secund\u00e1rios em execu\u00e7\u00e3o simult\u00e2nea, cada um lidando com uma parte da carga de trabalho do aplicativo.<\/p>\n<div class=\"flex flex-grow flex-col max-w-full\">\n<div class=\"min-h-[20px] text-message flex flex-col items-start whitespace-pre-wrap break-words [.text-message+&#038;]:mt-5 juice:w-full juice:items-end overflow-x-auto gap-2\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"1e4d9829-c164-483f-aadd-d9325136ca9b\">\n<div class=\"flex w-full flex-col gap-1 juice:empty:hidden juice:first:pt-[3px]\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p>Ao inicializar o m\u00f3dulo de cluster, o aplicativo cria o processo principal, que, em seguida, bifurca os processos secund\u00e1rios em processos de trabalho. O processo prim\u00e1rio atua como um balanceador de carga, distribuindo a carga de trabalho para os processos de trabalho enquanto cada processo de trabalho escuta as solicita\u00e7\u00f5es recebidas.<\/p>\n<p><span style=\"background-color: var(--darkreader-bg--kmt-sys-color-background-neutral-weak, #2b1f19);font-weight: var(--kmt-sys-typography-body-font-weight);--darkreader-inline-bgcolor: var(--darkreader-bg--darkreader-bg--kmt-sys-color-background-neutral-weak, #251d18)\" data-darkreader-inline-bgcolor>O m\u00f3dulo de cluster do Node.js tem dois m\u00e9todos de distribui\u00e7\u00e3o de conex\u00f5es de entrada.<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li><strong>A abordagem <\/strong><strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Round-robin_scheduling\" target=\"_blank\" rel=\"noopener noreferrer\">round-robin<\/a><\/strong> &#8211; O processo principal escuta em uma porta, aceita novas conex\u00f5es e distribui uniformemente a carga de trabalho para garantir que nenhum processo fique sobrecarregado. Essa \u00e9 a abordagem padr\u00e3o em todos os sistemas operacionais, exceto no Windows.<\/li>\n<li><strong>A segunda abordagem<\/strong> &#8211; O processo principal cria o soquete de escuta e o envia para os trabalhadores &#8220;interessados&#8221;, que aceitam conex\u00f5es de entrada diretamente.<\/li>\n<\/ul>\n<p>Teoricamente, a segunda abordagem, que \u00e9 mais complicada, deveria proporcionar um desempenho melhor. Mas, na pr\u00e1tica, a distribui\u00e7\u00e3o das conex\u00f5es \u00e9 muito desequilibrada. A <a href=\"https:\/\/nodejs.org\/api\/cluster.html#how-it-works\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o do Node.js<\/a> menciona que 70% de todas as conex\u00f5es acabam em apenas dois dos oito processos.<\/p>\n<h2>Como clusterizar seus aplicativos Node.js<\/h2>\n<p>Agora, vamos examinar os efeitos do clustering em um aplicativo Node.js. Este tutorial usa um aplicativo Express que executa intencionalmente uma tarefa computacional pesada para bloquear o loop de eventos.<\/p>\n<p>Primeiro, execute esse aplicativo sem clustering. Em seguida, registre o desempenho com uma ferramenta de benchmarking. Em seguida, o clustering \u00e9 implementado no aplicativo e o benchmarking \u00e9 repetido. Por fim, compare os resultados para ver como o clustering melhora o desempenho do aplicativo.<\/p>\n<h3>Primeiros passos<\/h3>\n<p>Para entender este tutorial, voc\u00ea deve estar familiarizado com o Node.js e o <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-express-js\/\">Express<\/a>. Para configurar seu <a href=\"https:\/\/kinsta.com\/pt\/blog\/crie-aplicativo-express\/\">servidor Express<\/a>:<\/p>\n<ol start=\"1\">\n<li>Comece criando o projeto.\n<pre><code class=\"language-bash\">mkdir cluster-tutorial<\/code><\/pre>\n<\/li>\n<li>Navegue at\u00e9 o diret\u00f3rio do aplicativo e crie dois arquivos, <strong>no-cluster.js<\/strong> e <strong>cluster.js<\/strong>, executando o comando abaixo:\n<pre><code class=\"language-bash\">cd cluster-tutorial && touch no-cluster.js && touch cluster.js<\/code><\/pre>\n<\/li>\n<li>Inicialize o NPM em seu projeto:\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<\/li>\n<li>Por fim, instale o Express executando o comando abaixo:\n<pre><code class=\"language-bash\">npm install express<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>Criando um aplicativo sem cluster<\/h3>\n<p>Em seu arquivo <strong>no-cluster.js<\/strong>, adicione o bloco de c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-javascript\">const express = require(\"express\");\nconst PORT = 3000;\n\nconst app = express();\n\napp.get(\"\/\", (req, res) =&gt; {\n  res.send(\"Response from server\");\n});\n\napp.get(\"\/slow\", (req, res) =&gt; {\n  \/\/Start timer \n  console.time(\"slow\");\n\n  \/\/ Generate a large array of random numbers\n  let arr = [];\n  for (let i = 0; i &lt; 100000; i++) {\n  arr.push(Math.random());\n  }\n\n  \/\/ Perform a heavy computation on the array\n  let sum = 0;\n  for (let i = 0; i  {\n  console.log(`Server listening on port ${PORT}`);\n});<\/code><\/pre>\n<p>O bloco de c\u00f3digo acima cria um servidor express que \u00e9 executado na porta <code>3000<\/code>. O servidor tem duas rotas, uma rota raiz (<code>\/<\/code>) e uma rota <code>\/slow<\/code>. A rota raiz envia uma resposta ao cliente com a mensagem: &#8220;Response from server.&#8221;<\/p>\n<p>No entanto, a rota <code>\/slow<\/code> faz intencionalmente alguns c\u00e1lculos pesados para bloquear o loop de eventos. Essa rota inicia um cron\u00f4metro e, em seguida, preenche uma array com 100.000 n\u00fameros aleat\u00f3rios usando um loop <code>for<\/code>.<\/p>\n<p>Em seguida, usando outro loop <code>for<\/code>, ele eleva cada n\u00famero da array gerada ao quadrado e os adiciona. O cron\u00f4metro termina quando isso \u00e9 conclu\u00eddo e o servidor responde com os resultados.<\/p>\n<p>Inicie seu servidor executando o comando abaixo:<\/p>\n<pre><code class=\"language-bash\">node no-cluster.js<\/code><\/pre>\n<p>Em seguida, fa\u00e7a uma solicita\u00e7\u00e3o GET para <code>localhost:3000\/slow<\/code>.<\/p>\n<p>Durante esse per\u00edodo, se voc\u00ea tentar fazer outras solicita\u00e7\u00f5es ao servidor &#8211; como para a rota raiz (<code>\/<\/code>) &#8211; as respostas ser\u00e3o lentas, pois a rota <code>\/slow<\/code> est\u00e1 bloqueando o loop de eventos.<\/p>\n<h3>Criando um aplicativo em cluster<\/h3>\n<p>Crie processos secund\u00e1rios usando o m\u00f3dulo cluster para garantir que seu aplicativo n\u00e3o fique sem resposta e n\u00e3o bloqueie solicita\u00e7\u00f5es subsequentes durante tarefas computacionais pesadas.<\/p>\n<p>Cada processo secund\u00e1rio executa seu pr\u00f3prio loop de eventos e compartilha a porta do servidor com o processo principal, permitindo um melhor uso dos recursos dispon\u00edveis.<\/p>\n<p>Primeiro, importe os m\u00f3dulos cluster e <code>os<\/code> do Node.js no seu arquivo cluster.js. O m\u00f3dulo cluster permite a cria\u00e7\u00e3o de processos secund\u00e1rios para distribuir a carga de trabalho entre v\u00e1rios n\u00facleos de CPU.<\/p>\n<p>O m\u00f3dulo <code>os<\/code> fornece informa\u00e7\u00f5es sobre o sistema operacional do seu computador. Voc\u00ea precisa desse m\u00f3dulo para recuperar o n\u00famero de n\u00facleos dispon\u00edveis no seu sistema e garantir que n\u00e3o crie mais processos secund\u00e1rios do que n\u00facleos no sistema.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Se voc\u00ea criar mais processos secund\u00e1rios do que n\u00facleos em seu sistema, ele gastar\u00e1 mais tempo alternando entre os processos. Isso aumenta a sobrecarga e diminui o desempenho.<\/p>\n<\/aside>\n\n<p>Adicione o bloco de c\u00f3digo abaixo para importar esses m\u00f3dulos e recuperar o n\u00famero de n\u00facleos em seu sistema:<\/p>\n<pre><code class=\"language-javascript\">const cluster = require(\"node:cluster\");\nconst numCores = require(\"node:os\").cpus().length;<\/code><\/pre>\n<p>Em seguida, adicione o bloco de c\u00f3digo abaixo ao seu arquivo <strong>cluster.js<\/strong>:<\/p>\n<pre><code class=\"language-javascript\">if (cluster.isMaster) {\n  console.log(`Master ${process.pid} is running`);\n  console.log(`This machine has ${numCores} cores`);\n\n  \/\/ Fork workers.\n  for (let i = 0; i  {\n  console.log(`worker ${worker.process.pid} died`);\n\n  \/\/ Replace the dead worker\n  console.log(\"Starting a new worker\");\n  cluster.fork();\n  });\n}<\/code><\/pre>\n<p>O bloco de c\u00f3digo acima verifica se o processo atual \u00e9 o processo principal ou de trabalho. Se for verdadeiro, o bloco de c\u00f3digo gera processos secund\u00e1rios com base no n\u00famero de n\u00facleos em seu sistema. Em seguida, ele escuta o evento de sa\u00edda nos processos e os substitui gerando novos processos.<\/p>\n<p>Por fim, envolva toda a l\u00f3gica expressa relacionada em um bloco else. Seu arquivo <strong>cluster.js<\/strong> finalizado deve ser semelhante ao bloco de c\u00f3digo abaixo.<\/p>\n<pre><code class=\"language-javascript\">\/\/cluster.js\nconst express = require(\"express\");\nconst PORT = 3000;\nconst cluster = require(\"node:cluster\");\nconst numCores = require(\"node:os\").cpus().length;\n\nif (cluster.isMaster) {\n  console.log(`Master ${process.pid} is running`);\n  console.log(`This machine has ${numCores} cores`);\n\n  \/\/ Fork workers.\n  for (let i = 0; i  {\n  console.log(`worker ${worker.process.pid} died`);\n\n  \/\/ Replace the dead worker\n  console.log(\"Starting a new worker\");\n  cluster.fork();\n  });\n} else {\n  const app = express();\n\n  app.get(\"\/\", (req, res) =&gt; {\n    res.send(\"Response from server\");\n  });\n\n  app.get(\"\/slow\", (req, res) =&gt; {\n   console.time(\"slow\");\n  \/\/ Generate a large array of random numbers\n  let arr = [];\n  for (let i = 0; i &lt; 100000; i++) {\n  arr.push(Math.random());\n    }\n\n   \/\/ Perform a heavy computation on the array\n   let sum = 0;\n  for (let i = 0; i  {\n  console.log(`Server listening on port ${PORT}`);\n  });\n}<\/code><\/pre>\n<p>Depois de implementar o clustering, v\u00e1rios processos tratar\u00e3o as solicita\u00e7\u00f5es. Isso significa que seu aplicativo permanecer\u00e1 responsivo mesmo durante uma tarefa computacional pesada.<\/p>\n<h2>Como avaliar o desempenho usando o loadtest<\/h2>\n<p>Para demonstrar e exibir com precis\u00e3o os efeitos do clustering em um aplicativo Node.js, use o pacote npm <a href=\"https:\/\/www.npmjs.com\/package\/loadtest\" target=\"_blank\" rel=\"noopener noreferrer\">loadtest<\/a> para comparar o desempenho do seu aplicativo antes e depois do clustering.<\/p>\n<p>Execute o comando abaixo para instalar o <code>loadtest<\/code> globalmente:<\/p>\n<pre><code class=\"language-bash\">npm install -g loadtest<\/code><\/pre>\n<p>O pacote <code>loadtest<\/code> executa um teste de carga em uma URL HTTP\/WebSockets especificada.<\/p>\n<p>Em seguida, inicie o arquivo <strong>no-cluster.js<\/strong> em uma inst\u00e2ncia do terminal. Em seguida, abra outra inst\u00e2ncia de terminal e execute o teste de carga abaixo:<\/p>\n<pre><code class=\"language-bash\">loadtest http:\/\/localhost:3000\/slow -n 100 -c 10<\/code><\/pre>\n<p>O comando acima envia <code>100<\/code> solicita\u00e7\u00f5es com uma simultaneidade de <code>10<\/code> para o seu aplicativo sem cluster. A execu\u00e7\u00e3o desse comando produz os resultados abaixo:<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/05\/non-clustered-result.jpg\" alt=\"Non-clustered app load test results\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Resultados do teste de carga do aplicativo n\u00e3o clusterizado.<\/figcaption><\/figure>\n<p>Com base nos resultados, foram necess\u00e1rios aproximadamente 100 segundos para concluir todas as solicita\u00e7\u00f5es sem clustering, e a solicita\u00e7\u00e3o mais extensa levou at\u00e9 12 segundos para ser conclu\u00edda.<\/p>\n<p>Os resultados variam de acordo com seu sistema.<\/p>\n<p>Em seguida, pare de executar o arquivo <strong>no-cluster.js<\/strong> e inicie o arquivo <strong>cluster.js<\/strong> em uma inst\u00e2ncia de terminal. Em seguida, abra outra inst\u00e2ncia de terminal e execute esse teste de carga:<\/p>\n<pre><code class=\"language-bash\">loadtest http:\/\/localhost:3000\/slow -n 100 -c 10<\/code><\/pre>\n<p>O comando acima enviar\u00e1 solicita\u00e7\u00f5es <code>100<\/code> com uma simultaneidade <code>10<\/code> para o seu aplicativo em cluster.<\/p>\n<p>A execu\u00e7\u00e3o desse comando produz os resultados abaixo:<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/05\/clustered-result.jpg\" alt=\"Clustered app load test result\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Resultado do teste de carga do aplicativo em cluster.<\/figcaption><\/figure>\n<p>Com clustering, as solicita\u00e7\u00f5es levaram 0,13 segundos (136 ms) para serem conclu\u00eddas, uma grande diminui\u00e7\u00e3o em rela\u00e7\u00e3o aos 100 segundos necess\u00e1rios para o aplicativo n\u00e3o clusterizado. Al\u00e9m disso, a solicita\u00e7\u00e3o mais longa no aplicativo clusterizado levou 41 ms para ser conclu\u00edda.<\/p>\n<p>Esses resultados demonstram que a implementa\u00e7\u00e3o do clustering melhora significativamente o desempenho do seu aplicativo. Observe que voc\u00ea deve usar um software de gerenciamento de processos como o <a href=\"https:\/\/pm2.keymetrics.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">PM2<\/a> para gerenciar o clustering em ambientes de produ\u00e7\u00e3o.<\/p>\n<h3>Usando o Node.js com a hospedagem de aplicativos da Kinsta<\/h3>\n<p>A Kinsta \u00e9 uma empresa de hospedagem que facilita a <a href=\"https:\/\/sevalla.com\/application-hosting\/\">implanta\u00e7\u00e3o de seus aplicativos Node.js<\/a>. Sua plataforma de hospedagem \u00e9 constru\u00edda sobre o Google Cloud Platform, que fornece uma infraestrutura confi\u00e1vel projetada para lidar com alto tr\u00e1fego e suportar aplicativos complexos. Em \u00faltima an\u00e1lise, isso melhora o desempenho dos aplicativos Node.js.<\/p>\n<p>A Kinsta oferece v\u00e1rios recursos para implanta\u00e7\u00f5es do Node.js, como conex\u00f5es internas de banco de dados, integra\u00e7\u00e3o com o Cloudflare, implanta\u00e7\u00f5es do GitHub e Google C2 Machines.<\/p>\n<p>Esses recursos facilitam a implanta\u00e7\u00e3o e o gerenciamento de aplicativos Node.js e simplificam o processo de desenvolvimento.<\/p>\n<p>Para implantar seu aplicativo Node.js na <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos\u00a0da Kinsta<\/a>, \u00e9 fundamental <a href=\"https:\/\/kinsta.com\/pt\/blog\/push-codigo-github\/\">enviar o c\u00f3digo e os arquivos do aplicativo<\/a> para o provedor Git que voc\u00ea escolheu <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">(Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>).<\/p>\n<p>Depois que seu reposit\u00f3rio estiver definido, siga estas etapas para implantar seu aplicativo Express na Kinsta:<\/p>\n<ol start=\"1\">\n<li>Fa\u00e7a login ou crie uma conta para visualizar seu painel <a href=\"https:\/\/my.kinsta.com\/?lang=pt\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta<\/a>.<\/li>\n<li>Autorize a Kinsta no seu provedor Git.<\/li>\n<li>Clique em <strong>Aplicativos<\/strong> na barra lateral esquerda e, em seguida, clique em <strong>Adicionar aplicativo<\/strong>.<\/li>\n<li>Selecione o reposit\u00f3rio e a branch a partir da qual voc\u00ea deseja implantar.<\/li>\n<li>Atribua um nome exclusivo ao seu aplicativo e escolha um <strong>local do centro de dados<\/strong>.<\/li>\n<li>Em seguida, configure seu ambiente de build. Selecione a configura\u00e7\u00e3o da <strong>build machine padr\u00e3o<\/strong> com a op\u00e7\u00e3o <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/nixpacks\">Nixpacks<\/a> recomendada para esta demonstra\u00e7\u00e3o.<\/li>\n<li>Use todas as configura\u00e7\u00f5es padr\u00e3o e, em seguida, clique em <strong>Criar aplicativo<\/strong>.<\/li>\n<\/ol>\n<h2>Resumo<\/h2>\n<p>O clustering no Node.js permite a cria\u00e7\u00e3o de v\u00e1rios processos de trabalho para distribuir a carga de trabalho, melhorando o desempenho e a escalabilidade dos aplicativos Node.js. A implementa\u00e7\u00e3o adequada do clustering \u00e9 fundamental para que voc\u00ea alcance todo o potencial dessa t\u00e9cnica.<\/p>\n<p>Projetar a arquitetura, gerenciar a aloca\u00e7\u00e3o de recursos e minimizar a lat\u00eancia da rede s\u00e3o fatores vitais ao implementar o clustering no Node.js. A import\u00e2ncia e a complexidade dessa implementa\u00e7\u00e3o s\u00e3o o motivo pelo qual os gerenciadores de processos, como o PM2, devem ser usados em ambientes de produ\u00e7\u00e3o.<\/p>\n<p><em>O que voc\u00ea pensa sobre o clustering do Node.js? Voc\u00ea j\u00e1 o usou antes? Compartilhe na se\u00e7\u00e3o de coment\u00e1rios!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Node.js \u00e9 um runtime JavaScript do lado do servidor que usa um modelo de entrada e sa\u00edda (I\/O) orientado por eventos e sem bloqueio. \u00c9 &#8230;<\/p>\n","protected":false},"author":199,"featured_media":68502,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[992,978],"class_list":["post-68501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-node-js","topic-tutoriais-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados\" \/>\n<meta property=\"og:description\" content=\"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-27T07:39:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-31T09:18:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados\",\"datePublished\":\"2024-05-27T07:39:54+00:00\",\"dateModified\":\"2024-05-31T09:18:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\"},\"wordCount\":1924,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\",\"name\":\"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\",\"datePublished\":\"2024-05-27T07:39:54+00:00\",\"dateModified\":\"2024-05-31T09:18:49+00:00\",\"description\":\"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados - Kinsta\u00ae","description":"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/","og_locale":"pt_PT","og_type":"article","og_title":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados","og_description":"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.","og_url":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2024-05-27T07:39:54+00:00","article_modified_time":"2024-05-31T09:18:49+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","type":"image\/png"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados","datePublished":"2024-05-27T07:39:54+00:00","dateModified":"2024-05-31T09:18:49+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/"},"wordCount":1924,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/","url":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/","name":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","datePublished":"2024-05-27T07:39:54+00:00","dateModified":"2024-05-31T09:18:49+00:00","description":"Este artigo faz uma an\u00e1lise detalhada sobre o clustering no Node.js e como isso afeta o desempenho de um aplicativo.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/05\/node-js-clustering.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/clustering-node-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/pt\/topicos\/node-js\/"},{"@type":"ListItem","position":3,"name":"Por Que o Clustering no Node.js \u00e9 Fundamental para Aplicativos Otimizados"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/68501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=68501"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/68501\/revisions"}],"predecessor-version":[{"id":68547,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/68501\/revisions\/68547"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/68501\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/68502"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=68501"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=68501"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=68501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}