Your SlideShare is downloading. ×
0
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Node.JS - Campus Party Brasil 2011

6,321

Published on

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

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

Published in: Technology
4 Comments
15 Likes
Statistics
Notes
No Downloads
Views
Total Views
6,321
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
143
Comments
4
Likes
15
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Capus Party 2011 Emerson Macedo @emerleite http://nodecasts.org http://codificando.com http://groups.google.com/group/nodebr
  • 2. #performance
  • 3. 2000
  • 4. 360 milhões deusuários de internet em todo mundo
  • 5. 9,8 milhões de usuários
  • 6. 9,8 milhões de usuários4,8 milhões são ativos
  • 7. 2010
  • 8. ~ 2 bilhões deusuários de internet em todo mundo
  • 9. 68 milhões de usuários
  • 10. 68 milhões de usuários37 milhões são ativos
  • 11. 2014
  • 12. ~ 70% dos adultos serão usuários regulares de redes sociais
  • 13. Tecnologias atuais
  • 14. Todas essas tecnologias tem algo em comum
  • 15. PHP 1995
  • 16. PHP 1995Java EE 1998
  • 17. PHP 1995Java EE 1998ASP.Net 2001
  • 18. PHP 1995 Java EE 1998 ASP.Net 2001Ruby on Rails 2004
  • 19. PHP 1995 Java EE 1998 ASP.Net 2001Ruby on Rails 2004 Django 2006
  • 20. Por que então mais uma tecnologia ?
  • 21. Usuários de Internet no Mundo (em milhões) 2.000 milhões200015001000 500 360 milhões 0 2000 2010
  • 22. Usuários de Internet no Brasil (em milhões) 70 milhões 7052,5 3517,5 10 milhões 0 2000 2010
  • 23. Mas já escalamos muito bem nossos sites
  • 24. Estrutura física deservidores para escalar
  • 25. Escalando na vertical
  • 26. Escalando na vertical
  • 27. Escalando na horizontal
  • 28. Escalando na horizontal
  • 29. Escalando na horizontal
  • 30. Escalando na horizontal
  • 31. Escalando DB na horizontal re ad ad re write write write
  • 32. Escalando DB na horizontal Shard Shard Shard Shard Shard ShardDatabase Database Database Database Database Database
  • 33. Arquitetura pra fazer o software escalar
  • 34. Pattern para atender muitos requests
  • 35. Pattern para atender muitos requestsFinalize a requisição o mais rápido possível
  • 36. HTTP GET
  • 37. HTTP POST
  • 38. Por que então mais uma tecnologia ?
  • 39. Escalando na horizontal
  • 40. Escalando na horizontal
  • 41. Evented, non-blocking I/O Google V8 Engine
  • 42. Qual é o problemadas tecnologias atuais ?
  • 43. Como manterconectados 10, 20 ou 30 mil usuários simultâneos ?
  • 44. Nosso código costuma ser escrito assim
  • 45. Nosso código costuma ser escrito assimO que o software está fazendo enquanto a querie executa ?
  • 46. Na maioria dos casosestá travado esperando a resposta
  • 47. Rails ou Django HTTPD Database
  • 48. Rails ou Django HTTPD Database
  • 49. Rails ou Django HTTPD Database
  • 50. Rails ou Django RUNTIME PROCESS HTTPD Database
  • 51. Rails ou Django RUNTIME BLOCK PROCESS HTTPD Database
  • 52. Rails ou Django RUNTIME BLOCK PROCESS RUNTIME BLOCK PROCESS HTTPD Database RUNTIME BLOCK PROCESS RUNTIME PROCESS BLOCK
  • 53. Java Servlet ContainerHTTPD Servlet Database
  • 54. Java Servlet ContainerHTTPD Servlet Database
  • 55. Java Servlet ContainerHTTPD Servlet Database
  • 56. Java Servlet Container ThreadHTTPD Servlet Database
  • 57. Java Servlet Container Thread BLOCKHTTPD Servlet Database
  • 58. Java Servlet Container Thread BLOCK Thread BLOCK Thread BLOCKHTTPD Servlet Database Thread BLOCK Thread BLOCK Thread BLOCK Thread BLOCK
  • 59. Apenas um processoabrindo uma thread para cada request
  • 60. Produtividade doprogramador mais que performance da tecnologia
  • 61. Apenas um processoabrindo uma thread para cada request
  • 62. Parece bom mas ...
  • 63. Como manterconectados 10, 20 ou 30 mil usuários simultâneos ?
  • 64. Como manterconectados 10, 20 ou 30 mil usuários simultâneos ? 30 mil threads ?
  • 65. concurrency × reqs/sec Apache vs NGINX concurrency × reqs/sec http://blog.webfaction.com/a-little-holiday-presenthttp://blog.webfaction.com/a-little-holiday-present
  • 66. concurrency × reqs/sec Apache vs NGINX concurrency × memory http://blog.webfaction.com/a-little-holiday-presenthttp://blog.webfaction.com/a-little-holiday-present
  • 67. Apache cria umathread por request
  • 68. Troca de contextoentre theads tem um custo
  • 69. Cada OS Threadcria uma pilha de execução nova
  • 70. Pense bem antes deusar uma thread por request quandoprecisar suportar alta concorrência
  • 71. Como manterconectados 10, 20 ou 30 mil usuários simultâneos ?
  • 72. Pattern para atender muitos requestsFinalize a requisição o mais rápido possível
  • 73. Pattern para atender alta concorrência
  • 74. Pattern para atender alta concorrência Evite threads
  • 75. Pattern para atender alta concorrência Evite threadsUse um Event Loop
  • 76. Performance !=Escalabilidade
  • 77. Performance !=Escalabilidade mas ...
  • 78. Uma performancemelhor ajuda a escalarcom menos recursos
  • 79. Precisamos fazer I/O de outra maneira
  • 80. Latência de I/O
  • 81. Latência de I/OL1 3 ciclos
  • 82. Latência de I/OL1 3 ciclosL2 14 ciclos
  • 83. Latência de I/O L1 3 ciclos L2 14 ciclosRAM 250 ciclos
  • 84. Latência de I/O L1 3 ciclos L2 14 ciclosRAM 250 ciclosDisco 41.000.000 ciclos
  • 85. Latência de I/O L1 3 ciclos L2 14 ciclosRAM 250 ciclosDisco 41.000.000 ciclosRede 240.000.000 ciclos
  • 86. Latência de I/O L1 3 ciclos L2 14 ciclosRAM 250 ciclosDisco 41.000.000 ciclosRede 240.000.000 ciclos
  • 87. I/O não bloqueante
  • 88. I/O não bloqueante L1 3 ciclos L2 14 ciclosRAM 250 ciclos
  • 89. I/O não bloqueante L1 3 ciclos L2 14 ciclosRAM 250 ciclos I/O bloqueante
  • 90. I/O não bloqueante L1 3 ciclos L2 14 ciclosRAM 250 ciclos I/O bloqueanteDisco 41.000.000 ciclosRede 240.000.000 ciclos
  • 91. Infraestrutura não bloqueante, puramente baseada em eventos, para desenvolver software de alta concorrência
  • 92. Servidor TCP simples em NodeJSO código acima faz com que a execução retorne imediatamente ao event loop
  • 93. Por que já nãofaziamos dessa forma ?
  • 94. POSIX Assync I/O não suportado por todos os S.Os
  • 95. POSIX Assync I/O não suportado por todos os S.Os libmysql_client nãopermite query async
  • 96. Filosofia do NodeJS
  • 97. Filosofia do NodeJSTodo I/O deveria ser feito desta forma
  • 98. Para qualqueroperação que acesse o disco ou a rede deve existir um callback
  • 99. ArquiteturaJavascript Node standard library C Node Bindings thread event pool loop V8 (libeio) (libev)
  • 100. Pilha de execução ev_loop() I/O em disco (bloqueante)
  • 101. Pilha de execução socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  • 102. Pilha de execução http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  • 103. Pilha de execução load(“index.html”) http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  • 104. Pilha de execução http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  • 105. Pilha de execução socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  • 106. Pilha de execução ev_loop() I/O em disco (bloqueante)
  • 107. Pilha de execução ev_loop() I/O em RAM (não bloqueante)
  • 108. Pilha de execução socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  • 109. Pilha de execução http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  • 110. Pilha de execução http_respond(2) http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  • 111. Pilha de execução http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  • 112. Pilha de execução socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  • 113. Pilha de execução ev_loop() I/O em RAM (não bloqueante)
  • 114. Pilha de execução ev_loop() Arquivo carregou do disco
  • 115. Pilha de execução file_loaded() ev_loop() Arquivo carregou do disco
  • 116. Pilha de execução http_respond(1) file_loaded() ev_loop() Arquivo carregou do disco
  • 117. Pilha de execução file_loaded() ev_loop() Arquivo carregou do disco
  • 118. Pilha de execução ev_loop() Arquivo carregou do disco
  • 119. Arquitetura Web
  • 120. Arquitetura Web Nginx
  • 121. Arquitetura Web Nginx Ruby Ruby Ruby Ruby Ruby or or or or orPython Python Python Python Python
  • 122. Arquitetura Web Nginx Ruby Ruby Ruby Ruby Ruby or or or or or NodeJSPython Python Python Python Python
  • 123. Arquitetura Web Nginx
  • 124. Arquitetura Web Nginx NodeJS
  • 125. Arquitetura Web NodeJS
  • 126. Arquitetura Web NodeJSQuando NodeJS estiver bem maduro, aidéia de Ryan é que ele seja a porta de entrada. Será ?
  • 127. #simplicidade
  • 128. Produtividade doprogramador mais que performance da tecnologia
  • 129. Don’t Repeat Yourself
  • 130. Configurações PropertiesXML YAML
  • 131. Configurações PropertiesXML YAML JSON Transporte
  • 132. Configurações JSON
  • 133. Configurações JSON
  • 134. Configurações JSON Transporte
  • 135. ConfiguraçõesJavascript Object Notation Transporte
  • 136. Server SideJava Ruby Python PHP
  • 137. Server SideJava Ruby Python PHP Client Side JavaScript
  • 138. Server Side JavaScript
  • 139. Server Side JavaScript
  • 140. Server Side JavaScriptClient Side
  • 141. #ecossistema
  • 142. Sinatra detected !
  • 143. Test driven development#vows - http://vowsjs.org/
  • 144. Test driven development
  • 145. Test driven development#http://github.com/visionmedia/expresso/
  • 146. #LIVE
  • 147. Obrigado !!! Emerson Macedo @emerleite http://nodecasts.org http://codificando.com
  • 148. Referênciashttp://www.internetworldstats.com/emarketing.htmhttp://en.wikipedia.org/wiki/Event_loophttp://lse.sourceforge.net/io/aio.htmlhttp://code.google.com/p/v8/http://opengroup.org/onlinepubs/007908775/xsh/select.htmlhttp://en.wikipedia.org/wiki/Thread_pool_patternhttp://www.commonjs.org/specs/modules/1.0/http://en.wikipedia.org/wiki/File_descriptorhttp://en.wikipedia.org/wiki/Reactor_pattern

×