fbpx

TECH TALKS

Compartilhe esta publicação

Por Vinicius Lima Carrijo

Node.js

Node.js é um ambiente que possibilita a execução de Javascript do lado do servidor de forma simples, rápida e performática sem ter a necessidade de um navegador.  

Isso é possível, basicamente, graças a biblioteca libuv e a Engine V8, que é o interpretador Javascript encontrado no navegador Google Chrome. Isso permite que o Node.js seja muito eficiente.

Node.js possui uma arquitetura inovadora que o torna inteiramente non-blocking tread. Devido a esta característica, Node.js explora de forma eficiente o processamento e a memória do servidor onde está hospedado, permitindo a criação de softwares altamente escaláveis.

Single Thread

O Node.js, é uma plataforma orientada a eventos que usa o conceito de single thread para manipular a sua pilha de eventos (Requisições) no qual é denominada de Call-Stack e tem como característica o comportamento do tipo LIFO (última entrada, primeira saída). Porém, existem algumas operações executadas no núcleo da plataforma (Works) que podem conter operações multi-thread que adotam o conceito I/O não bloqueantes. 

Estas operações I/O não bloqueantes são gerenciadas por uma biblioteca open-source escrita em C, chamada libuv, que utiliza um thread-pool para manipular e gerenciar as instruções e operações de maneira independente e paralelas (Assíncrono).

O Grande sucesso de performance do Node.js está nessa estratégia de utilizar uma única thread (Single Thread) para manipular a Call-Stack.

A programação assíncrona aplicada no Node.js garante que nenhuma operação dependerá do término de outra para ser executada e todas as operações serão executadas em conjunto.

No modelo multi-thread, considerando um cenário onde um servidor de aplicação inicia uma nova thread para cada requisição, a tendência será consumir muito recurso da máquina, tendo como consequência a necessidade de adicionar novos servidores para manter e suportar a demanda.

No modelo single thread, o Node.js processa mais operações concorrentes com os recursos inferiores ao exemplo anterior.

Event loop

Os eventos que chegam na plataforma do Node.js são empilhados na Stack de eventos. O Event-Loop fica responsável por observar qualquer alteração nos eventos da Stack e consequentemente processá-los imediatamente. Os eventos processados pelo Event-loop são delegados para libuv, que tem a responsabilidade de executar esses eventos em uma thread independente do Event-Loop, liberando o mesmo para seguir em frente com a verificação de eventos novos ou já presentes na Stack de Eventos (Event Queue) .

A maioria dos kernels são multi-threaded podendo manipular várias operações em segundo plano. Quando uma dessas operações é concluída, o kernel avisa ao Node.js que o processo foi finalizado e a libuv adiciona o call-back (Chamada de retorno) na Task Queue, que eventualmente será manipulado no próximo ciclo do Event-Loop. (Mas, porque próximo ciclo? Porque o Event-Loop é Single Thread, lembra?)

Quais as vantagens de utilizar a plataforma? 

  • Tem o seu próprio gerenciado de pacotes (NPM) que já vem instalado junto com o Node.js;
  • Maior repositório do mundo: O NPM fornece uma diversidade enorme de pacotes, Frameworks, libs e utilitários gratuitamente para instalar via NPM;
  • Utiliza JavasCript como linguagem base e isso é um diferencial pois o desenvolvedor pode utilizar JavaScript tanto no back-end quanto no front-end, bem como para desenvolvimento mobile, desktop e web;
  • Comunidade muito ativa;
  • Altamente escalável, leve e performático;
  • Non-Blocking I/O, ou seja não bloqueia seu fluxo de processamento;
  • Serverless:  Conta com suporte nas principais empresas de serviços Cloud: Google Cloud, Microsoft Azure e AWS.

Casos de usos comuns

Um exemplo comum é uma aplicação em tempo real, que exige um pouco mais de processamento rápido, como por exemplo, o bom e famoso ‘Chat’, que consiste em transferir mensagens com outra pessoa.

O Node.js também é indicado para ambientes escaláveis, que contam com uma grande quantidade de requisições simultâneas, pois o mesmo tem potencial para suportar uma carga maior de conexões concorrentes comparando com servidores tradicionais.

Quem já utiliza Node.js e aprova?

  • Netflix
  • IBM
  • Uber
  • Walmart
  • PayPal
  • LinkedIn
  • Ebay
  • NASA

Abaixo, alguns links oficiais que você pode conferir mais informações sobre a plataforma:

  • A coleção de guias e artigos oficiais: https://nodejs.org/en/docs/guides
  • A documentação de referência das APIs nativas: https://nodejs.org/api

Inscreva-se na nossa newsletter

Esteja atualizado das novidades do setor público e da Sonner

Veja outras publicações

Saiba mais como impulsionar a sua gestão

Conheça mais as soluções sonner.

sonner_modules

Vamos conversar?

Contate-nos e Descubra Como Otimizar sua Gestão, Priorizando o que Verdadeiramente Importa

Receba nossos conteúdos!

Preencha os campos.

Quer receber materiais exclusivos?

Preencha os campos.