2. Apresentação
O node.js é um interpretador de código JavaScript que
funciona no lado servidor.
Seu objetivo é ajudar programadores na criação de aplicações
de alta escalabilidade (como um servidor web), com códigos
capazes de manipular dezenas de milhares de conexões
simultâneas, numa única máquina física.
O node.js é baseado no interpretador Google V8 JavaScript
Engine (a mesma tecnologia do Google Chrome).
Foi criado por Ryan Dahl em 2009, e seu desenvolvimento é
mantido pela empresa Joyent.
3. O que é node.js
"O objetivo do Node é permitir uma maneira simples de desenvolver programas de rede
que precisem escalar."
- Ambiente de execução e bibliotecas para rodar JavaScript, independente de qualquer
navegador.
- Open Source e Multiplataforma: Linux, Windows, Mac, etc.
- É um framework para aplicações de rede de alta performance, otimizado para
ambientes com concorrência.
- É uma ferramenta de linha de comando.
- Foi desenvolvido 40% em JS e 60% em C++.
- O desenvolvimento com Node é feito com JavaScript, mas não da mesma forma como
fazemos no lado cliente.
4. Arquitetura do node.js
- Node.js opera em single-thread e usa o modelo
de I/O não bloqueante e baseado em eventos.
- Cliente envia uma requisição HTTP para o
servidor node.JS.
- O loop de eventos da thread principal registra um
callback, encaminha o trabalho para um pool de
threads e imediatamente retorna para escutar a
próxima conexão.
- As threads do pool executam as tarefas de longa
duração de forma assíncrona e paralelizada. Ao
finalizar uma tarefa, a resposta é enviada para a
thread principal via callback.
- O loop de eventos retorna o resultado para o
cliente.
5. Como escalar com node.js
- Escalando verticalmente
- Escalando horizontalmente
- Escalando com proxy reverso
Estratégias
6. Quando utilizar o node.js
- Se você precisa desenvolver uma API REST.
- Se você precisa criar serviços baseados em
real-time.
- Se você precisa gerenciar um alto nível de
concorrência com baixa utilização de CPU.
- Se sua equipe tem facilidade com
desenvolvimento JavaScript, porque eles
poderão escrever o lado cliente e o lado
servidor com a mesma linguagem.
Testes de performance:
https://code.google.com/p/node-js-vs-
apache-php-benchmark/wiki/Tests
7. Onde utilizar o node.js
- Você pode criar um servidor web com
apenas 4 linhas de código.
- Da mesma forma, você também pode criar
um servidor TCP.
- Essas poucas linhas permitem gerenciar
até 10.000 requisições por segundo.
- Também é possível criar:
- Servidores DNS
- Servidores de arquivos estáticos
- Aplicações real-time
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn') }).listen(1337, '127.0.0.1');
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo serverrn');
socket.pipe(socket) }).listen(1337, '127.0.0.1');
8. Vale a pena utilizar o node.js ?
- Para aplicações que não requerem um uso intensivo de
CPU, é possível escrever Javascript em todas as camadas,
inclusive no nível do banco de dados utilizando soluções de
banco de dados não relacionais, como o MongoDB.
- I/O assíncrono favorece a criação de ambientes com alta
escalabilidade e concorrência.
- Node.js foi criado para resolver o problema de
escalabilidade e concorrência, portanto é ideal para criação
de soluções com grande quantidade de usuários conectados
consumindo web services.
PRÓS CONTRAS
- Para aplicações que requerem conexão com banco de
dados relacionais, Node.js não é a melhor opção.
- Aplicações que exigem um alto processamento de CPU
anulam todos os benefícios do modelo de I/O não
bloqueante, uma vez que todas as novas conexões ficarão
bloqueadas enquanto a thread está ocupada com o
processamento.
- Por ser uma tecnologia relativamente nova e em constante
atualização , o futuro é incerto e por isso sua adoção envolve
um risco para o negócio.