NodeJS
Nos primórdios...
    ...ok, nem tanto assim
Nos primórdios...
                               ...ok, nem tanto assim


- Servidores Web com Apache.
Nos primórdios...
                               ...ok, nem tanto assim


- Servidores Web com Apache.

- Uma Thread para cada conexão.
Nos primórdios...
                               ...ok, nem tanto assim


- Servidores Web com Apache.

- Uma Thread para cada conexão.

- Requisição de E/S Bloqueante (latência).
O Problema
O Problema
- Uma thread usando 2mb de RAM
O Problema
- Uma thread usando 2mb de RAM


- 2MB x 3.000 conexões silmutâneas = 6GB
O Problema
- Uma thread usando 2mb de RAM


- 2MB x 3.000 conexões silmutâneas = 6GB


- Sites com grande número de requisições simultâneas? Tá bom....
Solução
Solução
- Possibilidades:
Solução
- Possibilidades:

  - Escalar verticalmente
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida

  - Nenhum dos ítens acima.
Solução
- Possibilidades:

  - Escalar verticalmente

  - Escalar horizontalmente

  - Desenvolver em outra linguagem de programação mais rápida

  - Nenhum dos ítens acima.
Novos paradigmas
Novos paradigmas
- Requisições de E/S não bloqueantes;
Novos paradigmas
- Requisições de E/S não bloqueantes;

- Chega de multiplas threads, basta uma (single thread).
Novos paradigmas
- Requisições de E/S não bloqueantes;

- Chega de multiplas threads, basta uma (single thread).

- E/S Assíncronas.
Novos paradigmas
- Requisições de E/S não bloqueantes;

- Chega de multiplas threads, basta uma (single thread).

- E/S Assíncronas.

- Multiplexação.
Ok, mas quem implementa tudo isso?
Ok, mas quem implementa tudo isso?


           NodeJS
O que é NodeJS?
O que é NodeJS?
- Criado por Ryan Dahl em 2009
O que é NodeJS?
- Criado por Ryan Dahl em 2009


- Plataforma de fácil desenvolvimento para aplicações de rede altamente escaláveis;
O que é NodeJS?
- Criado por Ryan Dahl em 2009


- Plataforma de fácil desenvolvimento para aplicações de rede altamente escaláveis;


- Desenvolvimento em Javascript no lado do servidor;
O que é NodeJS?
- Criado por Ryan Dahl em 2009


- Plataforma de fácil desenvolvimento para aplicações de rede altamente escaláveis;


- Desenvolvimento em Javascript no lado do servidor;



        Ok, mas o que isso significa na prática?
Arquitetura
Arquitetura
- Escrito em C/C++ e Javascript;
Arquitetura
- Escrito em C/C++ e Javascript;


- Baseado em Event Loop (epoll) utilizando libev;
Arquitetura
- Escrito em C/C++ e Javascript;


- Baseado em Event Loop (epoll) utilizando libev;


- Desenvolvido sobre a Javascript Engine V8(Google);
Exemplo de Código
- Servidor HTTP

 var http = require('http');

 http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("Hello World!");

 }).listen(8080, "127.0.0.1");

 console.log('Server running at http://127.0.0.1:8080/');
Módulos
Módulos
- NPM (Node Package Manager, escrito em Javascript)
Módulos
- NPM (Node Package Manager, escrito em Javascript)

- Banco de dados (Mysql, CouchDB, MongoDB, Redis...)
Módulos
- NPM (Node Package Manager, escrito em Javascript)

- Banco de dados (Mysql, CouchDB, MongoDB, Redis...)

- WebSocket (socket.io)
Módulos
- NPM (Node Package Manager, escrito em Javascript)

- Banco de dados (Mysql, CouchDB, MongoDB, Redis...)

- WebSocket (socket.io)

- Frameworks (expressjs, jade...)
Módulos
- NPM (Node Package Manager, escrito em Javascript)

- Banco de dados (Mysql, CouchDB, MongoDB, Redis...)

- WebSocket (socket.io)

- Frameworks (expressjs, jade...)


- Testes (vowsjs, expresso...)
Módulos
- NPM (Node Package Manager, escrito em Javascript)

- Banco de dados (Mysql, CouchDB, MongoDB, Redis...)

- WebSocket (socket.io)

- Frameworks (expressjs, jade...)


- Testes (vowsjs, expresso...)

- NPM é nativo a partir da versão 0.6.3
Módulos
Quando usar?
Quando usar?
- Servidor de arquivos estáticos;
Quando usar?
- Servidor de arquivos estáticos;

- Serviço TCP;
Quando usar?
- Servidor de arquivos estáticos;

- Serviço TCP;

- File Watcher;
Quando usar?
- Servidor de arquivos estáticos;

- Serviço TCP;

- File Watcher;

- Serviço WEB com muitas requisições por segundo;
Quando usar?
- Servidor de arquivos estáticos;

- Serviço TCP;

- File Watcher;

- Serviço WEB com muitas requisições por segundo;

- Criação de Sites;
Quando usar?
- Servidor de arquivos estáticos;

- Serviço TCP;

- File Watcher;

- Serviço WEB com muitas requisições por segundo;

- Criação de Sites;

- entre outros...
Posso substituir todas as minhas
  aplicações web por NodeJS?
Posso substituir todas as minhas
  aplicações web por NodeJS?


  Pode, mas não aconselho... ao menos por enquanto.
Referências
- http://nodejs.org/

- http://akitaonrails.com/2010/03/16/brincando-com-node-js-tornado-and-thin

- http://en.wikipedia.org/wiki/Event_loop

- http://stackoverflow.com/questions/4093185/whats-the-difference-between-
epoll-poll-threadpool

- http://npmjs.org/

- http://code.google.com/p/v8/
Obrigado pela atenção! =)

          FIM

Uma visão rápida sobre Nodejs