
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
- 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

