node.js - campus party brasil 2011

210
Emerson Macedo @emerleite http://nodecasts.org http://codificando.com http://groups.google.com/group/nodebr Capus Par 2011

Upload: emerson-macedo

Post on 12-Nov-2014

6.366 views

Category:

Technology


3 download

DESCRIPTION

Apresentação de Node.JS feita na Campus Party 2011.

TRANSCRIPT

Page 1: Node.JS - Campus Party Brasil 2011

Emerson Macedo@emerleite

http://nodecasts.orghttp://codificando.com

http://groups.google.com/group/nodebr

Capus Party 2011

Page 2: Node.JS - Campus Party Brasil 2011
Page 3: Node.JS - Campus Party Brasil 2011

#performance

Page 4: Node.JS - Campus Party Brasil 2011

2000

Page 5: Node.JS - Campus Party Brasil 2011

360 milhões de usuários de internet

em todo mundo

Page 6: Node.JS - Campus Party Brasil 2011
Page 7: Node.JS - Campus Party Brasil 2011

9,8 milhões de usuários

Page 8: Node.JS - Campus Party Brasil 2011

9,8 milhões de usuários

4,8 milhões são ativos

Page 9: Node.JS - Campus Party Brasil 2011
Page 10: Node.JS - Campus Party Brasil 2011

2010

Page 11: Node.JS - Campus Party Brasil 2011

~ 2 bilhões de usuários de internet

em todo mundo

Page 12: Node.JS - Campus Party Brasil 2011
Page 13: Node.JS - Campus Party Brasil 2011

68 milhões de usuários

Page 14: Node.JS - Campus Party Brasil 2011

68 milhões de usuários

37 milhões são ativos

Page 15: Node.JS - Campus Party Brasil 2011
Page 16: Node.JS - Campus Party Brasil 2011
Page 17: Node.JS - Campus Party Brasil 2011

2014

Page 18: Node.JS - Campus Party Brasil 2011

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

Page 19: Node.JS - Campus Party Brasil 2011
Page 20: Node.JS - Campus Party Brasil 2011
Page 21: Node.JS - Campus Party Brasil 2011
Page 22: Node.JS - Campus Party Brasil 2011

Tecnologias atuais

Page 23: Node.JS - Campus Party Brasil 2011
Page 24: Node.JS - Campus Party Brasil 2011
Page 25: Node.JS - Campus Party Brasil 2011
Page 26: Node.JS - Campus Party Brasil 2011
Page 27: Node.JS - Campus Party Brasil 2011
Page 28: Node.JS - Campus Party Brasil 2011

Todas essas tecnologias tem algo em comum

Page 29: Node.JS - Campus Party Brasil 2011

PHP 1995

Page 30: Node.JS - Campus Party Brasil 2011

PHP 1995

Java EE 1998

Page 31: Node.JS - Campus Party Brasil 2011

PHP 1995

Java EE 1998

ASP.Net 2001

Page 32: Node.JS - Campus Party Brasil 2011

PHP 1995

Java EE 1998

ASP.Net 2001

Ruby on Rails 2004

Page 33: Node.JS - Campus Party Brasil 2011

PHP 1995

Java EE 1998

ASP.Net 2001

Ruby on Rails 2004

Django 2006

Page 34: Node.JS - Campus Party Brasil 2011

Por que então mais uma tecnologia ?

Page 35: Node.JS - Campus Party Brasil 2011

0

500

1000

1500

2000

2000 2010

2.000 milhões

360 milhões

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

Page 36: Node.JS - Campus Party Brasil 2011

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 37: Node.JS - Campus Party Brasil 2011

Mas já escalamos muito bem nossos sites

Page 38: Node.JS - Campus Party Brasil 2011

Estrutura física de servidores para escalar

Page 39: Node.JS - Campus Party Brasil 2011

Escalando na vertical

Page 40: Node.JS - Campus Party Brasil 2011

Escalando na vertical

Page 41: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 42: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 43: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 44: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 45: Node.JS - Campus Party Brasil 2011
Page 46: Node.JS - Campus Party Brasil 2011

Escalando DB na horizontal

write

read

write write

read

Page 47: Node.JS - Campus Party Brasil 2011

Escalando DB na horizontal

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

ShardDatabase

Page 48: Node.JS - Campus Party Brasil 2011
Page 49: Node.JS - Campus Party Brasil 2011

Arquitetura pra fazer o software escalar

Page 50: Node.JS - Campus Party Brasil 2011

Pattern para atender muitos requests

Page 51: Node.JS - Campus Party Brasil 2011

Pattern para atender muitos requests

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

Page 52: Node.JS - Campus Party Brasil 2011

HTTP GET

Page 53: Node.JS - Campus Party Brasil 2011
Page 54: Node.JS - Campus Party Brasil 2011
Page 55: Node.JS - Campus Party Brasil 2011
Page 56: Node.JS - Campus Party Brasil 2011
Page 57: Node.JS - Campus Party Brasil 2011
Page 58: Node.JS - Campus Party Brasil 2011

HTTP POST

Page 59: Node.JS - Campus Party Brasil 2011
Page 60: Node.JS - Campus Party Brasil 2011
Page 61: Node.JS - Campus Party Brasil 2011
Page 62: Node.JS - Campus Party Brasil 2011
Page 63: Node.JS - Campus Party Brasil 2011
Page 64: Node.JS - Campus Party Brasil 2011

Por que então mais uma tecnologia ?

Page 65: Node.JS - Campus Party Brasil 2011
Page 66: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 67: Node.JS - Campus Party Brasil 2011

Escalando na horizontal

Page 68: Node.JS - Campus Party Brasil 2011
Page 69: Node.JS - Campus Party Brasil 2011
Page 70: Node.JS - Campus Party Brasil 2011

Evented, non-blocking I/O Google V8 Engine

Page 71: Node.JS - Campus Party Brasil 2011

Qual é o problema das tecnologias atuais ?

Page 72: Node.JS - Campus Party Brasil 2011

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 73: Node.JS - Campus Party Brasil 2011

Nosso código costuma ser escrito assim

Page 74: Node.JS - Campus Party Brasil 2011

Nosso código costuma ser escrito assim

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

Page 75: Node.JS - Campus Party Brasil 2011

Na maioria dos casos está travado esperando

a resposta

Page 76: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD Database

Page 77: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD Database

Page 78: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD Database

Page 79: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD

RUNTIMEPROCESS

Database

Page 80: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD

RUNTIMEPROCESS

Database

BLOCK

Page 81: Node.JS - Campus Party Brasil 2011

Rails ou Django

HTTPD

RUNTIMEPROCESS

RUNTIMEPROCESS

RUNTIMEPROCESS

RUNTIMEPROCESS

Database

BLOCK

BLOCK

BLOCK

BLOCK

Page 82: Node.JS - Campus Party Brasil 2011
Page 83: Node.JS - Campus Party Brasil 2011
Page 84: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet Container

Servlet

Page 85: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet Container

Servlet

Page 86: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet Container

Servlet

Page 87: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet ContainerThread

Servlet

Page 88: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet ContainerThread

Servlet

BLOCK

Page 89: Node.JS - Campus Party Brasil 2011

Java

HTTPD Database

Servlet ContainerThread

Thread

Thread

Thread

Thread

Thread

Thread

Servlet

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

BLOCK

Page 90: Node.JS - Campus Party Brasil 2011

Apenas um processo abrindo uma thread para cada request

Page 91: Node.JS - Campus Party Brasil 2011
Page 92: Node.JS - Campus Party Brasil 2011
Page 93: Node.JS - Campus Party Brasil 2011

Produtividade do programador mais que

performance da tecnologia

Page 94: Node.JS - Campus Party Brasil 2011

Apenas um processo abrindo uma thread para cada request

Page 95: Node.JS - Campus Party Brasil 2011

Parece bom mas ...

Page 96: Node.JS - Campus Party Brasil 2011

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 97: Node.JS - Campus Party Brasil 2011

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

30 mil threads ?

Page 98: Node.JS - Campus Party Brasil 2011

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 99: Node.JS - Campus Party Brasil 2011

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 100: Node.JS - Campus Party Brasil 2011

Apache cria uma thread por request

Page 101: Node.JS - Campus Party Brasil 2011

Troca de contexto entre theads tem

um custo

Page 102: Node.JS - Campus Party Brasil 2011

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

Page 103: Node.JS - Campus Party Brasil 2011

Pense bem antes de usar uma thread por

request quando precisar suportar alta

concorrência

Page 104: Node.JS - Campus Party Brasil 2011

Como manter conectados 10, 20 ou

30 mil usuários simultâneos ?

Page 105: Node.JS - Campus Party Brasil 2011
Page 106: Node.JS - Campus Party Brasil 2011

Pattern para atender muitos requests

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

Page 107: Node.JS - Campus Party Brasil 2011

Pattern para atender alta concorrência

Page 108: Node.JS - Campus Party Brasil 2011

Pattern para atender alta concorrência

Evite threads

Page 109: Node.JS - Campus Party Brasil 2011

Pattern para atender alta concorrência

Evite threads

Use um Event Loop

Page 110: Node.JS - Campus Party Brasil 2011

Performance!=

Escalabilidade

Page 111: Node.JS - Campus Party Brasil 2011

Performance!=

Escalabilidade

mas ...

Page 112: Node.JS - Campus Party Brasil 2011

Uma performance melhor ajuda a escalar com menos recursos

Page 113: Node.JS - Campus Party Brasil 2011
Page 114: Node.JS - Campus Party Brasil 2011
Page 115: Node.JS - Campus Party Brasil 2011

Precisamos fazer I/O de outra maneira

Page 116: Node.JS - Campus Party Brasil 2011

Latência de I/O

Page 117: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

Latência de I/O

Page 118: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

L2 14 ciclos

Latência de I/O

Page 119: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Latência de I/O

Page 120: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

Disco 41.000.000 ciclos

Latência de I/O

Page 121: Node.JS - Campus Party Brasil 2011

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 122: Node.JS - Campus Party Brasil 2011

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 123: Node.JS - Campus Party Brasil 2011

I/O não bloqueante

Page 124: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

I/O não bloqueante

Page 125: Node.JS - Campus Party Brasil 2011

L1 3 ciclos

L2 14 ciclos

RAM 250 ciclos

I/O não bloqueante

I/O bloqueante

Page 126: Node.JS - Campus Party Brasil 2011

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 127: Node.JS - Campus Party Brasil 2011

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

software de alta concorrência

Page 128: Node.JS - Campus Party Brasil 2011

Servidor TCP simples em NodeJS

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

Page 129: Node.JS - Campus Party Brasil 2011

Por que já não faziamos dessa forma ?

Page 130: Node.JS - Campus Party Brasil 2011
Page 131: Node.JS - Campus Party Brasil 2011

POSIX Assync I/O não suportado por todos

os S.Os

Page 132: Node.JS - Campus Party Brasil 2011

POSIX Assync I/O não suportado por todos

os S.Os

libmysql_client não permite query async

Page 133: Node.JS - Campus Party Brasil 2011

Filosofia do NodeJS

Page 134: Node.JS - Campus Party Brasil 2011

Filosofia do NodeJS

Todo I/O deveria ser feito desta forma

Page 135: Node.JS - Campus Party Brasil 2011

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

Page 136: Node.JS - Campus Party Brasil 2011

Arquitetura

eventloop

(libev)

threadpool

(libeio)

V8

Node Bindings

Node standard libraryJavascript

C

Page 137: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

I/O em disco (bloqueante)

Page 138: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(1)

Pilha de execução

I/O em disco (bloqueante)

Page 139: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

I/O em disco (bloqueante)

Page 140: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

load(“index.html”)

I/O em disco (bloqueante)

Page 141: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(1)

http_parse(1)

Pilha de execução

I/O em disco (bloqueante)

Page 142: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(1)

Pilha de execução

I/O em disco (bloqueante)

Page 143: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

I/O em disco (bloqueante)

Page 144: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

I/O em RAM (não bloqueante)

Page 145: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 146: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 147: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

http_respond(2)

I/O em RAM (não bloqueante)

Page 148: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(2)

http_parse(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 149: Node.JS - Campus Party Brasil 2011

ev_loop()

socket_readdable(2)

Pilha de execução

I/O em RAM (não bloqueante)

Page 150: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

I/O em RAM (não bloqueante)

Page 151: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

Arquivo carregou do disco

Page 152: Node.JS - Campus Party Brasil 2011

ev_loop()

file_loaded()

Pilha de execução

Arquivo carregou do disco

Page 153: Node.JS - Campus Party Brasil 2011

ev_loop()

file_loaded()

http_respond(1)

Pilha de execução

Arquivo carregou do disco

Page 154: Node.JS - Campus Party Brasil 2011

ev_loop()

file_loaded()

Pilha de execução

Arquivo carregou do disco

Page 155: Node.JS - Campus Party Brasil 2011

ev_loop()

Pilha de execução

Arquivo carregou do disco

Page 156: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Page 157: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Nginx

Page 158: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Nginx

Page 159: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Rubyor

Python

Nginx

NodeJS

Page 160: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Nginx

Page 161: Node.JS - Campus Party Brasil 2011

Arquitetura Web

Nginx

NodeJS

Page 162: Node.JS - Campus Party Brasil 2011

Arquitetura Web

NodeJS

Page 163: Node.JS - Campus Party Brasil 2011

Arquitetura Web

NodeJS

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

entrada. Será ?

Page 164: Node.JS - Campus Party Brasil 2011

#simplicidade

Page 165: Node.JS - Campus Party Brasil 2011

Produtividade do programador mais que

performance da tecnologia

Page 166: Node.JS - Campus Party Brasil 2011
Page 167: Node.JS - Campus Party Brasil 2011
Page 168: Node.JS - Campus Party Brasil 2011
Page 169: Node.JS - Campus Party Brasil 2011
Page 170: Node.JS - Campus Party Brasil 2011

Don’t Repeat Yourself

Page 171: Node.JS - Campus Party Brasil 2011
Page 172: Node.JS - Campus Party Brasil 2011
Page 173: Node.JS - Campus Party Brasil 2011
Page 174: Node.JS - Campus Party Brasil 2011
Page 175: Node.JS - Campus Party Brasil 2011
Page 176: Node.JS - Campus Party Brasil 2011
Page 177: Node.JS - Campus Party Brasil 2011

XML

Properties

YAML

Configurações

Page 178: Node.JS - Campus Party Brasil 2011

XML

Properties

YAML

Configurações

JSON

Transporte

Page 179: Node.JS - Campus Party Brasil 2011

Configurações

JSON

Page 180: Node.JS - Campus Party Brasil 2011

Configurações

JSON

Page 181: Node.JS - Campus Party Brasil 2011

Configurações

JSON

Transporte

Page 182: Node.JS - Campus Party Brasil 2011

Configurações

Javascript Object Notation

Transporte

Page 183: Node.JS - Campus Party Brasil 2011

Java Ruby Python

Server Side

PHP

Page 184: Node.JS - Campus Party Brasil 2011

Java Ruby Python

Server Side

PHP

Client Side

JavaScript

Page 185: Node.JS - Campus Party Brasil 2011

Server Side

JavaScript

Page 186: Node.JS - Campus Party Brasil 2011

Server Side

JavaScript

Page 187: Node.JS - Campus Party Brasil 2011

Server Side

JavaScript

Client Side

Page 188: Node.JS - Campus Party Brasil 2011

#ecossistema

Page 189: Node.JS - Campus Party Brasil 2011
Page 190: Node.JS - Campus Party Brasil 2011
Page 191: Node.JS - Campus Party Brasil 2011

Sinatra detected !

Page 192: Node.JS - Campus Party Brasil 2011
Page 193: Node.JS - Campus Party Brasil 2011

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

Page 194: Node.JS - Campus Party Brasil 2011

Test driven development

Page 195: Node.JS - Campus Party Brasil 2011

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

Page 196: Node.JS - Campus Party Brasil 2011
Page 197: Node.JS - Campus Party Brasil 2011
Page 198: Node.JS - Campus Party Brasil 2011
Page 199: Node.JS - Campus Party Brasil 2011
Page 200: Node.JS - Campus Party Brasil 2011
Page 201: Node.JS - Campus Party Brasil 2011
Page 202: Node.JS - Campus Party Brasil 2011
Page 203: Node.JS - Campus Party Brasil 2011
Page 204: Node.JS - Campus Party Brasil 2011
Page 205: Node.JS - Campus Party Brasil 2011
Page 206: Node.JS - Campus Party Brasil 2011
Page 207: Node.JS - Campus Party Brasil 2011
Page 208: Node.JS - Campus Party Brasil 2011

#LIVE

Page 209: Node.JS - Campus Party Brasil 2011

Obrigado !!!

Emerson Macedo@emerleite

http://nodecasts.orghttp://codificando.com