Node.JS - Campus Party Brasil 2011

7.973 visualizações

Publicada em

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

Publicada em: Tecnologia
4 comentários
16 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
7.973
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2.649
Ações
Compartilhamentos
0
Downloads
152
Comentários
4
Gostaram
16
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Node.JS - Campus Party Brasil 2011

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

×