Skip to content

Introdução ao Node.js

E ai galera, tudo bom? Faz tempo que não escrevo e resolvi voltar a escrever sobre um assunto que estou estudando nos últimos dias Node.js. Já teve gente que me perguntou se eu estava largando o tão querido .Net e respondo que não! Resolvi estudar Node.js justamente para sair um pouco da minha zona de conforto em relação ao .Net, também por que o próximo .Net está muito parecido com o Node.js (claro que o .Net continua com o C# :)) e por ultimo por que os cases dessa plataforma são muitos.

Bom, o meu objetivo é escrever uma série de artigos que vão do básico ao avançado e o artigo de hoje irei falar o que é e como funciona o Node.js e por que é tão bem respeitado no mundo de desenvolvimento. Para criar uma introdução em Node.js realmente agradável, eu irei dividir em 3 partes. Essa será a primeira e vamos começar com o conceito na plataforma. Boa leitura.

O que é Node.js? Uma linguagem nova? Um framework? Não! Node.js é um interpretador de código JavaScript no lado do servidor, muito rápido e flexível. Lado servidor rodando JavaScript? Isso mesmo, da mesma maneira que você desenvolve no front-end utilizando JavaScript, você também poderá desenvolver no back-end. Claro que no lado servidor você não irá manipular elementos HTML e sim programar como C# quando desenvolve uma página web, acessar banco de dados e etc. Consegue imaginar isso?

Mas como Node.js consegue fazer isso? Bem, se você acessar a página do Node.js https://nodejs.org poderá ver que ele utiliza o V8 JavaScript Engine criado pelo google, uma maquina virtual JavaScript desenvolvido em C++ utilizado no Chrome. O criador do Node.js, Ryan Dahl em 2009, gostou da ideia e criou a plataforma de desenvolvimento Node.js.

Muita gente acha que Node.js é só para Web igual ao IIS ou Apache. Tanto no IIS ou Apache depois de instalado em minutos você terá uma página pronta para ser acessada, já no Node.js a coisa é um pouco diferente, você é que cria o servidor web (se tiver interesse em criar um, pois ele não serve apenas como um servidor web), mas se você criar um aplicativo web, o seu aplicativo web será um servidor web. Outra diferença é que os servidores tradicionais são mais robustos e complexos, utilizando um maior consumo da maquina. Do lado do Node.js podemos dizer que ele é extremamente simples, porem ainda muito seguro e muito rápido.

Node.js é single-thread e I/O não bloqueante. Essa foi uma das primeiras coisas que ouvi falar sobre Node.js e achava estranho. Como uma plataforma de desenvolvimento pode ser single-thread?

Bem, primeiro temos que saber como IIS ou Apache funciona sendo multi-thread para podermos comparar com Node.js.

Toda vez que uma requisição chega para servidores web do tipo multi-thread, é disponibilizado uma thread para cuidar dessa requisição especifica, toda requisição ganha uma thread. Obviamente que esse número de thread não é infinito, se não isso seria mundo perfeito, tudo depende da capacidade do servidor. Existe um pool de thread e quando todas estão ocupadas as novas requisições ficam aguardando uma thread estar livre. A thread que atende a requisição ganha alguns recursos, por exemplo, uma certa quantidade de memória para poder atender a requisição. Caso a requisição tenha um processo de I/O (banco de dados, arquivos e etc), ou seja, um processo que pode fazer a thread ficar aguardando, a instrução é executada e enquanto isso a thread que está atendendo essa requisição fica parada até que todo o processo seja executado. Após isso a requisição é preparada para ser liberada para o cliente que solicitou. Para sistemas de pouco porte isso funciona muito bem, já para sistema de grande porte isso pode ser ruim, por que muito recurso do servidor é utilizado e normalmente existem requisições aguardando para ser atendidas por que todo o pool de thread foi utilizado. Claro que resolver esse problema não é complicado para quem pode, por exemplo utilizar uma farm de servidores web para atender a demanda.

Já no Node.js muda o paradigma, é utilizado o Java Script Event e isso é fácil para quem já está familiarizado com JavaScript, pois é o recurso de utilizar o conceito de funções callback que é chamada no final de uma instrução. Por causa disso podemos dizer que tudo no Node.js é assíncrono. Uma observação que faço aqui é que nos dois últimos anos C# melhorou muito e também tem o conceito de assíncrono através do nome reservado assync.

Node.js começa por um limitado pool de thread para receber as requisições de clientes, quando uma requisição chega é colocado dentro de uma fila chamado “Event Queue”. O responsável por pegar as requisições que estão na fila, processar e retornar para o cliente é chamado de “Event Loop” que é o coração do Node.js e funciona de forma single-thread, Porem, se existir algum processo de I/O bloqueante o Event Loop para de executar e chama um Internal Thread Pool, feito em C++, para executar o processo e devolver para o Event Loop quando terminar, mas a grande diferença que temos que notar é que o Event Loop não espera o retorno do Internal Thread Pool, ele parte para outra requisição que está na fila e começa a atender.

Essa é a grande diferença do Node.js e por que é conhecido por ser single-thread e I/O não bloqueante. Com esse processo podemos atender muito mais requisições do que os servidores web tradicionais.

Abaixo temos um diagrama que representa o funcionamento do core do Node.js:

core node

Para instalar o Node.js é muito simples e irei passar o processo como um usuário windows (Sim, sou usuário windows!). Basta acessar o site http://nodejs.org e baixar o instalador. Hoje a versão é a 4.0 e tem aproximadamente 10Mb. A instalação é simples e é só seguir os passos do instalador.

Após a instalação você terá um command próprio do Node.js conforme a imagem abaixo:

node cmd

Outra mudança grande que Node.js traz principalmente para quem está acostumado com .Net é que não temos o VS onde de um f5 e seu site começa a rodar. Aqui tudo é por comando. Mas não fique triste, tudo é fácil e você se acostuma.

Para o primeiro artigo terminamos aqui, a partir do próximo iremos implementar um servidor web e a cada artigo a coisa irá ficar mais complexa. Para esse primeiro o objetivo foi passar a ideia do que é e como funciona o Node.js.

Espero que tenham gostado e até o próximo!

Fontes:

https://pt.wikipedia.org/wiki/Node.js
http://www.journaldev.com/7462/node-js-processing-model-single-threaded-model-with-event-loop-architecture
http://rickgaribay.net/archive/2012/01/28/node-is-not-single-threaded.aspx
http://www.journaldev.com/7462/node-js-processing-model-single-threaded-model-with-event-loop-architecture

Published innode.js

4 Comments

  1. Ótimo artigo para esclarecer algumas coisas sobre o node pra quem só ouviu falar, mas nunca deu uma olhada de perto.

  2. Pablo Pablo

    Muito bom o post, parabéns!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *