Your SlideShare is downloading. ×
Secomp 2011 - Node.JS - Introdução
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

Secomp 2011 - Node.JS - Introdução

809
views

Published on

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

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

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

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