Nodejs - A performance que eu sempre quis ter

241
A performance que eu sempre quis ter Emerson Macedo @emerleite http://codificando.com http://visaoagil.wordpress.com/author/emerleite/

description

Palestra apresentada no evento DevInSampa - www.devinsampa.com.br

Transcript of Nodejs - A performance que eu sempre quis ter

Page 1: Nodejs - A performance que eu sempre quis ter

A performance que eu sempre quis ter

Emerson Macedo@emerleite

http://codificando.comhttp://visaoagil.wordpress.com/author/emerleite/

Page 2: Nodejs - A performance que eu sempre quis ter

#whoami

Page 3: Nodejs - A performance que eu sempre quis ter
Page 4: Nodejs - A performance que eu sempre quis ter

2000

Page 5: Nodejs - A performance que eu sempre quis ter

360 milhões de usuários de internet

em todo mundo

Page 6: Nodejs - A performance que eu sempre quis ter
Page 7: Nodejs - A performance que eu sempre quis ter

9,8 milhões de usuários

Page 8: Nodejs - A performance que eu sempre quis ter

9,8 milhões de usuários

4,8 milhões são ativos

Page 9: Nodejs - A performance que eu sempre quis ter

Com poucos usuários qualquer tecnologia

funciona

Page 10: Nodejs - A performance que eu sempre quis ter
Page 11: Nodejs - A performance que eu sempre quis ter

2010

Page 12: Nodejs - A performance que eu sempre quis ter

~ 2 bilhões de usuários de internet

em todo mundo

Page 13: Nodejs - A performance que eu sempre quis ter
Page 14: Nodejs - A performance que eu sempre quis ter

68 milhões de usuários

Page 15: Nodejs - A performance que eu sempre quis ter

68 milhões de usuários

37 milhões são ativos

Page 16: Nodejs - A performance que eu sempre quis ter
Page 17: Nodejs - A performance que eu sempre quis ter

Com muitos usuários nem toda tecnologia

funciona

Page 18: Nodejs - A performance que eu sempre quis ter
Page 19: Nodejs - A performance que eu sempre quis ter

Tecnologias atuais

Page 20: Nodejs - A performance que eu sempre quis ter
Page 21: Nodejs - A performance que eu sempre quis ter
Page 22: Nodejs - A performance que eu sempre quis ter
Page 23: Nodejs - A performance que eu sempre quis ter
Page 24: Nodejs - A performance que eu sempre quis ter
Page 25: Nodejs - A performance que eu sempre quis ter

Todas essas tecnologias tem algo em comum

Page 26: Nodejs - A performance que eu sempre quis ter

PHP 1995

Page 27: Nodejs - A performance que eu sempre quis ter

PHP 1995

Java EE 1998

Page 28: Nodejs - A performance que eu sempre quis ter

PHP 1995

Java EE 1998

ASP.Net 2002

Page 29: Nodejs - A performance que eu sempre quis ter

PHP 1995

Java EE 1998

ASP.Net 2002

Ruby on Rails 2005

Page 30: Nodejs - A performance que eu sempre quis ter

PHP 1995

Java EE 1998

ASP.Net 2002

Ruby on Rails 2005

Django 2005

Page 31: Nodejs - A performance que eu sempre quis ter

Por que então mais uma tecnologia ?

Page 32: Nodejs - A performance que eu sempre quis ter

0

500

1000

1500

2000

2000 2010

2.000 milhões

360 milhões

Usuários de Internet no Mundo (em milhões)

Page 33: Nodejs - A performance que eu sempre quis ter

0

17,5

35

52,5

70

2000 2010

70 milhões

10 milhões

Usuários de Internet no Brasil (em milhões)

Page 34: Nodejs - A performance que eu sempre quis ter

Mas já escalamos muito bem nossos sites

Page 35: Nodejs - A performance que eu sempre quis ter

Estrutura física de servidores para escalar

Page 36: Nodejs - A performance que eu sempre quis ter

Escalando na vertical

Page 37: Nodejs - A performance que eu sempre quis ter

Escalando na vertical

Page 38: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 39: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 40: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 41: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 42: Nodejs - A performance que eu sempre quis ter
Page 43: Nodejs - A performance que eu sempre quis ter

Escalando DB na horizontal

write

read

write write

read

Page 44: Nodejs - A performance que eu sempre quis ter

Escalando DB na horizontal

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

Page 45: Nodejs - A performance que eu sempre quis ter
Page 46: Nodejs - A performance que eu sempre quis ter

Arquitetura pra fazer o software escalar

Page 47: Nodejs - A performance que eu sempre quis ter

Pattern para atender muitos requests

Page 48: Nodejs - A performance que eu sempre quis ter

Pattern para atender muitos requests

Finalize a requisição o mais rápido possível

Page 49: Nodejs - A performance que eu sempre quis ter

HTTP GET

Page 50: Nodejs - A performance que eu sempre quis ter
Page 51: Nodejs - A performance que eu sempre quis ter
Page 52: Nodejs - A performance que eu sempre quis ter
Page 53: Nodejs - A performance que eu sempre quis ter
Page 54: Nodejs - A performance que eu sempre quis ter
Page 55: Nodejs - A performance que eu sempre quis ter

HTTP POST

Page 56: Nodejs - A performance que eu sempre quis ter

Pattern para atender muitos requests

Finalize a requisição o mais rápido possível

Page 57: Nodejs - A performance que eu sempre quis ter
Page 58: Nodejs - A performance que eu sempre quis ter
Page 59: Nodejs - A performance que eu sempre quis ter
Page 60: Nodejs - A performance que eu sempre quis ter
Page 61: Nodejs - A performance que eu sempre quis ter
Page 62: Nodejs - A performance que eu sempre quis ter

Por que então mais uma tecnologia ?

Page 63: Nodejs - A performance que eu sempre quis ter

2014

Page 64: Nodejs - A performance que eu sempre quis ter

~ 70% dos adultos serão usuários regulares de redes sociais

Page 65: Nodejs - A performance que eu sempre quis ter
Page 66: Nodejs - A performance que eu sempre quis ter

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 67: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 68: Nodejs - A performance que eu sempre quis ter

Escalando na horizontal

Page 69: Nodejs - A performance que eu sempre quis ter
Page 70: Nodejs - A performance que eu sempre quis ter
Page 71: Nodejs - A performance que eu sempre quis ter

Evented, non-blocking I/O Google V8 Engine

Page 72: Nodejs - A performance que eu sempre quis ter

Qual é o problema das tecnologias atuais ?

Page 73: Nodejs - A performance que eu sempre quis ter

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 74: Nodejs - A performance que eu sempre quis ter

Nosso código costuma ser escrito assim

Page 75: Nodejs - A performance que eu sempre quis ter

Nosso código costuma ser escrito assim

O que o software está fazendo enquanto a querie executa ?

Page 76: Nodejs - A performance que eu sempre quis ter

Na maioria dos casos está travado esperando

a resposta

Page 77: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD Database

Page 78: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD Database

Page 79: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD Database

Page 80: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD

RUNTIMEPROCESS

Database

Page 81: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD

RUNTIMEPROCESS

Database

BLOCK

Page 82: Nodejs - A performance que eu sempre quis ter

Rails ou Django

HTTPD

RUNTIMEPROCESS

RUNTIMEPROCESS

RUNTIMEPROCESS

RUNTIMEPROCESS

Database

BLOCK

BLOCK

BLOCK

BLOCK

Page 83: Nodejs - A performance que eu sempre quis ter
Page 84: Nodejs - A performance que eu sempre quis ter
Page 85: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet Container

Servlet

Page 86: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet Container

Servlet

Page 87: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet Container

Servlet

Page 88: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet ContainerThread

Servlet

Page 89: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet ContainerThread

Servlet

BLOCK

Page 90: Nodejs - A performance que eu sempre quis ter

Java

HTTPD Database

Servlet ContainerThread

Thread

Thread

Thread

Thread

Thread

Thread

Servlet

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

Page 91: Nodejs - A performance que eu sempre quis ter

Apenas um processo abrindo uma thread para cada request

Page 92: Nodejs - A performance que eu sempre quis ter
Page 93: Nodejs - A performance que eu sempre quis ter
Page 94: Nodejs - A performance que eu sempre quis ter

Produtividade do programador mais que

performance da tecnologia

Page 95: Nodejs - A performance que eu sempre quis ter

Apenas um processo abrindo uma thread para cada request

Page 96: Nodejs - A performance que eu sempre quis ter

Parece bom mas ...

Page 97: Nodejs - A performance que eu sempre quis ter

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 98: Nodejs - A performance que eu sempre quis ter

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

30 mil threads ?

Page 99: Nodejs - A performance que eu sempre quis ter

Apache vs NGINXconcurrency × reqs/sec

http://blog.webfaction.com/a-little-holiday-present

Apache vs NGINXconcurrency × reqs/sec

http://blog.webfaction.com/a-little-holiday-present

Page 100: Nodejs - A performance que eu sempre quis ter

Apache vs NGINXconcurrency × memory

http://blog.webfaction.com/a-little-holiday-present

Apache vs NGINXconcurrency × reqs/sec

http://blog.webfaction.com/a-little-holiday-present

Page 101: Nodejs - A performance que eu sempre quis ter

Apache cria uma thread por request

Page 102: Nodejs - A performance que eu sempre quis ter

Troca de contexto entre theads tem

um custo

Page 103: Nodejs - A performance que eu sempre quis ter

Cada OS Thread cria uma pilha de execução nova

Page 104: Nodejs - A performance que eu sempre quis ter

Não devemos usar uma thread por request

quando precisamos suportar alta concorrência

Page 105: Nodejs - A performance que eu sempre quis ter

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 106: Nodejs - A performance que eu sempre quis ter
Page 107: Nodejs - A performance que eu sempre quis ter
Page 108: Nodejs - A performance que eu sempre quis ter

Pattern para atender muitos requests

Finalize a requisição o mais rápido possível

Page 109: Nodejs - A performance que eu sempre quis ter

Pattern para atender alta concorrência

Page 110: Nodejs - A performance que eu sempre quis ter

Pattern para atender alta concorrência

Não crie threads

Page 111: Nodejs - A performance que eu sempre quis ter

Pattern para atender alta concorrência

Não crie threads

Use um Event Loop

Page 112: Nodejs - A performance que eu sempre quis ter

Produtividade do programador mais que

performance da tecnologia

Page 113: Nodejs - A performance que eu sempre quis ter

Performance!=

Escalabilidade

Page 114: Nodejs - A performance que eu sempre quis ter

Performance!=

Escalabilidade

mas ...

Page 115: Nodejs - A performance que eu sempre quis ter

Uma performance melhor ajuda a escalar com menos recursos

Page 116: Nodejs - A performance que eu sempre quis ter
Page 117: Nodejs - A performance que eu sempre quis ter
Page 118: Nodejs - A performance que eu sempre quis ter

Precisamos fazer I/O de outra maneira

Page 119: Nodejs - A performance que eu sempre quis ter

Latência de I/O

Page 120: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

Latência de I/O

Page 121: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

Latência de I/O

Page 122: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Latência de I/O

Page 123: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Disco 41.000.000 ciclos

Latência de I/O

Page 124: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Disco 41.000.000 ciclos

Rede 240.000.000 ciclos

Latência de I/O

Page 125: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Disco 41.000.000 ciclos

Rede 240.000.000 ciclos

Latência de I/O

Page 126: Nodejs - A performance que eu sempre quis ter

I/O não bloqueante

Page 127: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

I/O não bloqueante

Page 128: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

I/O não bloqueante

I/O bloqueante

Page 129: Nodejs - A performance que eu sempre quis ter

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Disco 41.000.000 ciclos

Rede 240.000.000 ciclos

I/O não bloqueante

I/O bloqueante

Page 130: Nodejs - A performance que eu sempre quis ter

Infraestrutura não bloqueante, puramente baseada em eventos, para desenvolver

software de alta concorrência

Page 131: Nodejs - A performance que eu sempre quis ter

Servidor TCP simples em NodeJS

O código acima faz com que a execução retorne imediatamente ao event loop

Page 132: Nodejs - A performance que eu sempre quis ter

Por que já não faziamos dessa forma ?

Page 133: Nodejs - A performance que eu sempre quis ter
Page 134: Nodejs - A performance que eu sempre quis ter

POSIX Assync I/O não suportado por todos

os S.Os

Page 135: Nodejs - A performance que eu sempre quis ter

POSIX Assync I/O não suportado por todos

os S.Os

libmysql_client não permite query async

Page 136: Nodejs - A performance que eu sempre quis ter

Filosofia do NodeJS

Page 137: Nodejs - A performance que eu sempre quis ter

Filosofia do NodeJS

Todo I/O deveria ser feito desta forma

Page 138: Nodejs - A performance que eu sempre quis ter

Para qualquer operação que acesse o disco ou a rede deve existir um callback

Page 139: Nodejs - A performance que eu sempre quis ter

Arquitetura

eventloop

(libev)

threadpool

(libeio)

V8

Node Bindings

Node standard libraryJavascript

C

Page 140: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

I/O em disco (bloqueante)

Page 141: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(1)

Pilha de execução

I/O em disco (bloqueante)

Page 142: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

I/O em disco (bloqueante)

Page 143: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

load(“index.html”)

I/O em disco (bloqueante)

Page 144: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

I/O em disco (bloqueante)

Page 145: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(1)

Pilha de execução

I/O em disco (bloqueante)

Page 146: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

I/O em disco (bloqueante)

Page 147: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

I/O em RAM (não bloqueante)

Page 148: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 149: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 150: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

http_respond(2)

I/O em RAM (não bloqueante)

Page 151: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 152: Nodejs - A performance que eu sempre quis ter

ev_loop()

socket_readdable(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 153: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

I/O em RAM (não bloqueante)

Page 154: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

Arquivo carregou do disco

Page 155: Nodejs - A performance que eu sempre quis ter

ev_loop()

file_loaded()

Pilha de execução

Arquivo carregou do disco

Page 156: Nodejs - A performance que eu sempre quis ter

ev_loop()

file_loaded()

http_respond(1)

Pilha de execução

Arquivo carregou do disco

Page 157: Nodejs - A performance que eu sempre quis ter

ev_loop()

file_loaded()

Pilha de execução

Arquivo carregou do disco

Page 158: Nodejs - A performance que eu sempre quis ter

ev_loop()

Pilha de execução

Arquivo carregou do disco

Page 159: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Page 160: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Nginx

Page 161: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Nginx

Page 162: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Nginx

NodeJS

Page 163: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Nginx

Page 164: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

Nginx

NodeJS

Page 165: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

NodeJS

Page 166: Nodejs - A performance que eu sempre quis ter

Arquitetura Web

NodeJS

Quando NodeJS estiver bem maduro, a idéia de Ryan é que ele seja a porta de

entrada. Será ?

Page 167: Nodejs - A performance que eu sempre quis ter

Por que Javascript ?

Page 168: Nodejs - A performance que eu sempre quis ter
Page 169: Nodejs - A performance que eu sempre quis ter
Page 170: Nodejs - A performance que eu sempre quis ter

Não é burocrático,assim como Ruby ou

Python

Page 171: Nodejs - A performance que eu sempre quis ter

Não é burocrático,assim como Ruby ou

Python

Especialistas Javascript Client-Sidejá pensam assíncrono

Page 172: Nodejs - A performance que eu sempre quis ter

Instalação

Page 173: Nodejs - A performance que eu sempre quis ter

Instalação

http://nodejs.org/#download

Page 174: Nodejs - A performance que eu sempre quis ter

Instalação

http://nodejs.org/#download

$ ./configure$ make$ make install

Page 175: Nodejs - A performance que eu sempre quis ter

Desenvolvendo aplicações web

Page 176: Nodejs - A performance que eu sempre quis ter
Page 177: Nodejs - A performance que eu sempre quis ter

Express JS

http://expressjs.com/

Page 178: Nodejs - A performance que eu sempre quis ter

Express JS

http://expressjs.com/

Sinatra ???

Page 179: Nodejs - A performance que eu sempre quis ter

Express JS#múltiplos ambientes

Page 180: Nodejs - A performance que eu sempre quis ter

Express JS#markup

Page 181: Nodejs - A performance que eu sempre quis ter

Express JS#markup

Page 182: Nodejs - A performance que eu sempre quis ter

Express JS#stylesheet

Page 183: Nodejs - A performance que eu sempre quis ter

Express JS#comportamento

Page 184: Nodejs - A performance que eu sempre quis ter

Express JS#comportamento

Page 185: Nodejs - A performance que eu sempre quis ter

Database

Page 186: Nodejs - A performance que eu sempre quis ter

Database

http://wiki.github.com/ry/node/modules#database

Page 187: Nodejs - A performance que eu sempre quis ter

Database

http://wiki.github.com/ry/node/modules#database

MongoDBCouchDBMySQL AssíncronoSqliteRedisPostgres

Page 188: Nodejs - A performance que eu sempre quis ter

Test driven development#vows - http://vowsjs.org/

Page 189: Nodejs - A performance que eu sempre quis ter

Test driven development

Page 190: Nodejs - A performance que eu sempre quis ter

Test driven development#http://github.com/visionmedia/expresso/

Page 191: Nodejs - A performance que eu sempre quis ter
Page 192: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

Page 193: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

#instalação$ curl http://npmjs.org/install.sh | sh

Page 194: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

#instalação$ curl http://npmjs.org/install.sh | sh

#utilização$ npm install pacote

Page 195: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

#instalação$ curl http://npmjs.org/install.sh | sh

#desinstalação$ npm uninstall npm

#utilização$ npm install pacote

Page 196: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

Page 197: Nodejs - A performance que eu sempre quis ter

#stable - expressjs$ npm install express

Node package manager

http://github.com/isaacs/npm

Page 198: Nodejs - A performance que eu sempre quis ter

#stable - expressjs$ npm install express

Node package manager

http://github.com/isaacs/npm

#unstable - hamljs$ npm install hamljs@latest

Page 199: Nodejs - A performance que eu sempre quis ter

#stable - expressjs$ npm install express

Node package manager

http://github.com/isaacs/npm

#unstable - hamljs$ npm install hamljs@latest

#versão - vows$ npm install [email protected]

Page 200: Nodejs - A performance que eu sempre quis ter

Node package manager

Page 201: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

Page 202: Nodejs - A performance que eu sempre quis ter

#listando$ npm list

Node package manager

http://github.com/isaacs/npm

Page 203: Nodejs - A performance que eu sempre quis ter

#listando$ npm list

Node package manager

http://github.com/isaacs/npm

#instalado$ npm list @installed

Page 204: Nodejs - A performance que eu sempre quis ter

#listando$ npm list

Node package manager

http://github.com/isaacs/npm

#instalado$ npm list @installed

#autor$ npm list =ry

Page 205: Nodejs - A performance que eu sempre quis ter

Node package manager

Page 206: Nodejs - A performance que eu sempre quis ter

Node package manager

http://github.com/isaacs/npm

Page 207: Nodejs - A performance que eu sempre quis ter

#atualizando$ npm update

Node package manager

http://github.com/isaacs/npm

Page 208: Nodejs - A performance que eu sempre quis ter

#atualizando$ npm update

Node package manager

http://github.com/isaacs/npm

#porpacote$ npm update pacote

Page 209: Nodejs - A performance que eu sempre quis ter

#atualizando$ npm update

Node package manager

http://github.com/isaacs/npm

#porpacote$ npm update pacote

#ondefica~/.node_libraries

Page 210: Nodejs - A performance que eu sempre quis ter

Deployment em produção

Page 211: Nodejs - A performance que eu sempre quis ter

Spark + Nginx

http://github.com/senchalabs/spark

Page 212: Nodejs - A performance que eu sempre quis ter

Spark + Nginx

http://github.com/senchalabs/spark

#instalação$ npm install spark@latest

Page 213: Nodejs - A performance que eu sempre quis ter

Spark + Nginx

http://github.com/senchalabs/spark

#instalação$ npm install spark@latest

#utilização$ spark -p [port] -n [processes]

Page 214: Nodejs - A performance que eu sempre quis ter

Spark + Nginx

Page 215: Nodejs - A performance que eu sempre quis ter

Spark + Nginx#config.js

Page 216: Nodejs - A performance que eu sempre quis ter

Spark + Nginx#config.js

#nginx

Page 217: Nodejs - A performance que eu sempre quis ter
Page 218: Nodejs - A performance que eu sempre quis ter

Oportunidades

Page 219: Nodejs - A performance que eu sempre quis ter

Upload de arquivos

Page 220: Nodejs - A performance que eu sempre quis ter

Upload de arquivos

Streaming de vídeo

Page 221: Nodejs - A performance que eu sempre quis ter

Upload de arquivos

Streaming de vídeo

Real-time web applications

Page 222: Nodejs - A performance que eu sempre quis ter
Page 223: Nodejs - A performance que eu sempre quis ter

Alternativas

Page 224: Nodejs - A performance que eu sempre quis ter
Page 225: Nodejs - A performance que eu sempre quis ter
Page 226: Nodejs - A performance que eu sempre quis ter
Page 227: Nodejs - A performance que eu sempre quis ter

Status atual

Page 228: Nodejs - A performance que eu sempre quis ter

Status atual

Versão 0.1.103

Page 229: Nodejs - A performance que eu sempre quis ter

Javascript ~ 6000 linhas

Status atual

Versão 0.1.103

Page 230: Nodejs - A performance que eu sempre quis ter

Javascript ~ 6000 linhas

C++ ~ 11000 linhas

Status atual

Versão 0.1.103

Page 231: Nodejs - A performance que eu sempre quis ter

Javascript ~ 6000 linhas

C++ ~ 11000 linhas

Mailin list ~ 1200 pessoas

Status atual

Versão 0.1.103

Page 232: Nodejs - A performance que eu sempre quis ter

Javascript ~ 6000 linhas

C++ ~ 11000 linhas

Mailin list ~ 1200 pessoas

Status atual

Versão 0.1.103

Contribuidores ~ 70 pessoas

Page 233: Nodejs - A performance que eu sempre quis ter

Conclusão

Page 234: Nodejs - A performance que eu sempre quis ter

I/O não deve ser feito da forma que fazemos

hoje em dia

Page 235: Nodejs - A performance que eu sempre quis ter

Muito promissor

Page 236: Nodejs - A performance que eu sempre quis ter

Muito promissor

Podemos usar já !!!

Page 237: Nodejs - A performance que eu sempre quis ter

Produtividade do programador mais que

performance da tecnologia

Page 238: Nodejs - A performance que eu sempre quis ter
Page 239: Nodejs - A performance que eu sempre quis ter
Page 240: Nodejs - A performance que eu sempre quis ter

Obrigado !!!

Emerson Macedo@emerleite

http://codificando.com