Secomp 2011 - Node.JS - Introdução

1.111 visualizações

Publicada em

Palestra introdutória de Node.JS na Universidade Estadual de Londrina, no evento SECOMP 2011

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.111
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
32
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Secomp 2011 - Node.JS - Introdução

  1. 1. Introduçãoao Node.JS Emerson Macedo @emerleite http://nodecasts.org http://codificando.com
  2. 2. #whoami
  3. 3. #performance
  4. 4. 2000
  5. 5. 360 milhões deusuários de internet em todo mundo
  6. 6. 9,8 milhões de usuários
  7. 7. 9,8 milhões de usuários4,8 milhões são ativos
  8. 8. 2010
  9. 9. ~ 2 bilhões deusuários de internet em todo mundo
  10. 10. 68 milhões de usuários
  11. 11. 68 milhões de usuários37 milhões são ativos
  12. 12. 2014
  13. 13. ~ 70% dos adultos serão usuários regulares de redes sociais
  14. 14. Tecnologias atuais
  15. 15. Todas essas tecnologias tem algo em comum
  16. 16. PHP 1995
  17. 17. PHP 1995Java EE 1998
  18. 18. PHP 1995Java EE 1998ASP.Net 2001
  19. 19. PHP 1995 Java EE 1998 ASP.Net 2001Ruby on Rails 2004
  20. 20. PHP 1995 Java EE 1998 ASP.Net 2001Ruby on Rails 2004 Django 2006
  21. 21. Por que então mais uma tecnologia ?
  22. 22. Usuários de Internet no Mundo (em milhões) 2.000 milhões200015001000 500 360 milhões 0 2000 2010
  23. 23. Usuários de Internet no Brasil (em milhões) 70 milhões 7052,5 3517,5 10 milhões 0 2000 2010
  24. 24. Mas já escalamos muito bem nossos sites
  25. 25. Estrutura física deservidores para escalar
  26. 26. Escalando na vertical
  27. 27. Escalando na vertical
  28. 28. Escalando na horizontal
  29. 29. Escalando na horizontal
  30. 30. Escalando na horizontal
  31. 31. Escalando na horizontal
  32. 32. Escalando DB na horizontal re ad ad re write write write
  33. 33. Escalando DB na horizontal Shard Shard Shard Shard Shard ShardDatabase Database Database Database Database Database
  34. 34. Arquitetura pra fazer o software escalar
  35. 35. Pattern para atender muitos requests
  36. 36. Pattern para atender muitos requestsFinalize a requisição o mais rápido possível
  37. 37. HTTP GET
  38. 38. HTTP POST
  39. 39. Por que então mais uma tecnologia ?
  40. 40. Escalando na horizontal
  41. 41. Escalando na horizontal
  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. Filosofia do NodeJS
  94. 94. Filosofia do NodeJSTodo I/O deveria ser feito desta forma
  95. 95. Para qualqueroperação que acesse o disco ou a rede deveexistir um callback ou um evento
  96. 96. ArquiteturaJavascript Node standard library C Node Bindings thread event IOCP pool loop V8 (async) (libeio) (libev) unix windows
  97. 97. Pilha de execução ev_loop() I/O em disco (bloqueante)
  98. 98. Pilha de execução socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  99. 99. Pilha de execução http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  100. 100. Pilha de execução load(“index.html”) http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  101. 101. Pilha de execução http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  102. 102. Pilha de execução socket_readdable(1) ev_loop() I/O em disco (bloqueante)
  103. 103. Pilha de execução ev_loop() I/O em disco (bloqueante)
  104. 104. Pilha de execução ev_loop() I/O em RAM (não bloqueante)
  105. 105. Pilha de execução socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  106. 106. Pilha de execução http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  107. 107. Pilha de execução http_respond(2) http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  108. 108. Pilha de execução http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  109. 109. Pilha de execução socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
  110. 110. Pilha de execução ev_loop() I/O em RAM (não bloqueante)
  111. 111. Pilha de execução ev_loop() Arquivo carregou do disco
  112. 112. Pilha de execução file_loaded() ev_loop() Arquivo carregou do disco
  113. 113. Pilha de execução http_respond(1) file_loaded() ev_loop() Arquivo carregou do disco
  114. 114. Pilha de execução file_loaded() ev_loop() Arquivo carregou do disco
  115. 115. Pilha de execução ev_loop() Arquivo carregou do disco
  116. 116. Arquitetura Web
  117. 117. Arquitetura Web Nginx
  118. 118. Arquitetura Web Nginx Ruby Ruby Ruby Ruby Ruby or or or or orPython Python Python Python Python
  119. 119. Arquitetura Web Nginx Ruby Ruby Ruby Ruby Ruby or or or or or NodeJSPython Python Python Python Python
  120. 120. Arquitetura Web Nginx
  121. 121. Arquitetura Web Nginx NodeJS
  122. 122. Arquitetura Web NodeJS
  123. 123. Arquitetura Web NodeJSQuando NodeJS estiver bem maduro, aidéia de Ryan é que ele seja a porta de entrada. Será ?
  124. 124. #simplicidade
  125. 125. Produtividade doprogramador mais que performance da tecnologia
  126. 126. Don’t Repeat Yourself
  127. 127. Configurações PropertiesXML YAML
  128. 128. Configurações PropertiesXML YAML JSON Transporte
  129. 129. Configurações JSON
  130. 130. Configurações JSON
  131. 131. Configurações JSON Transporte
  132. 132. ConfiguraçõesJavascript Object Notation Transporte
  133. 133. Server SideJava Ruby Python PHP
  134. 134. Server SideJava Ruby Python PHP Client Side JavaScript
  135. 135. Server Side JavaScript
  136. 136. Server Side JavaScript
  137. 137. Server Side JavaScriptClient Side
  138. 138. #ecossistema
  139. 139. #realtime
  140. 140. #database
  141. 141. #web
  142. 142. #template
  143. 143. #testes
  144. 144. #hospedagem
  145. 145. #nginx
  146. 146. #aprender
  147. 147. Obrigado !!! Emerson Macedo @emerleite http://nodecasts.org http://codificando.com

×