Arquitetura Java: Escalando Sua Aplicação Além do Hype

F853760c988228c4a153333407e64f09?s=47 Rafael Ponte
September 23, 2017

Arquitetura Java: Escalando Sua Aplicação Além do Hype

(Lightning Talk ministrada no evento Java #11 da JavaCE em SET-2017)

É muito comum evangelizarem que hoje em dia uma aplicação somente escala se utilizarmos micro-serviços, containers, cloud computing e muitos outras tecnologias e práticas da moda, do tal do HYPE.

Mas será mesmo? Já se perguntou como as aplicações escalavam ANTES desse hype todo? Que tipos de práticas e tecnologias eram utilizadas? Alias, será mesmo que meu sistema web precisa escalar para centenas ou milhares de usuários?

Nessa palestra (lightning talk) de 15min vamos entender como podemos escalar nosso sistema web SEM se levar pelo hype, partindo de práticas mais simples e baratas até mais as rebuscadas e com um maior investimento. Se você entende pouco ou quase nada sobre como escalar uma aplicação web, então essa palestra é para você!

F853760c988228c4a153333407e64f09?s=128

Rafael Ponte

September 23, 2017
Tweet

Transcript

  1. ARQUITETURA JAVA escalando sua aplicação além do hype

  2. ahh o hype…

  3. None
  4. podemos escalar SEM o hype…

  5. Rafael Ponte @rponte

  6. None
  7. ARQUITETURA JAVA escalando sua aplicação além do hype

  8. Como escalar minha app para MILHARES de usuários?

  9. Loja Virtual

  10. None
  11. Revisitando a Web…

  12. servidor

  13. servidor

  14. navegador servidor

  15. navegador servidor requisição

  16. navegador servidor db requisição

  17. navegador servidor db requisição resposta

  18. navegador servidor db requisição resposta

  19. Performance 
 X 
 Escalabilidade

  20. 2 conceitos importantes

  21. tempo de resposta (response time)

  22. navegador servidor db requisição resposta

  23. navegador servidor db requisição resposta tempo resposta

  24. navegador servidor db requisição resposta tempo resposta: 100ms

  25. operações / unidade_tempo (throughput)

  26. usuários / minuto (throughput)

  27. usuários / segundo (throughput)

  28. usuários / segundo (throughput)

  29. requisições / segundo (throughput)

  30. navegador servidor db requisição resposta

  31. navegador servidor db requisição resposta tempo resposta: 100ms

  32. servidor db requisição resposta tempo resposta: 100ms

  33. servidor db requisição resposta tempo resposta: 100ms

  34. servidor db requisição resposta tempo resposta: 1s

  35. servidor db requisição resposta tempo resposta: 7s

  36. servidor db requisição resposta tempo resposta: 24s

  37. servidor db requisição resposta tempo resposta: 0

  38. nossa aplicação não escala mais do que: 80 req/s

  39. navegador servidor db requisição resposta throughput: 80 req/s

  40. navegador servidor db requisição resposta throughput: 250 req/s

  41. navegador servidor db requisição resposta throughput: 1000 req/s

  42. PASSOS 5 RESUMINDO EM

  43. Passo 1
 (TUNANDO A APLICAÇÃO)

  44. navegador servidor db requisição resposta

  45. navegador servidor db requisição resposta

  46. None
  47. None
  48. None
  49. None
  50. None
  51. None
  52. JVM

  53. None
  54. 2Gb

  55. 2Gb ???

  56. 2Gb 256Mb

  57. 2Gb ??Mb

  58. 2Gb 2Gb

  59. 2Gb 2Gb =

  60. 2Gb 2Gb = X

  61. 2Gb 1Gb

  62. 2Gb 1Gb -Xms256m -Xmx1024m 
 -XX:MaxPermSize=192m

  63. 2Gb 1Gb -Xms256m -Xmx1024m 
 -XX:MaxPermSize=192m

  64. 2Gb 1Gb -Xms256m -Xmx1024m 
 -XX:MaxPermSize=192m minimo != maximo

  65. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m minimo = maximo

  66. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m Heap Size

  67. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m

  68. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m PermGen Size

  69. 2Gb 1Gb

  70. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m memoria

  71. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m -server modo servidor memoria

  72. 2Gb 1Gb -Xms1024m -Xmx1024m 
 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC
 -XX:+CMSParallelRemarkEnabled -server modo

    servidor memoria coletor de lixo (GC)
  73. Sistema 
 não aguenta?

  74. Passo 2
 (MELHORANDO A MÁQUINA)

  75. navegador servidor db requisição resposta

  76. navegador servidor db requisição resposta

  77. cpu memoria

  78. None
  79. None
  80. X

  81. None
  82. None
  83. None
  84. x 6 x 6

  85. Mais requisições?

  86. None
  87. None
  88. None
  89. Escalabilidade Vertical (scale up)

  90. None
  91. None
  92. None
  93. None
  94. None
  95. None
  96. None
  97. X

  98. Sistema 
 não aguenta?

  99. Passo 3
 (ADICIONANDO MAIS MÁQUINAS)

  100. navegador servidor db requisição resposta

  101. navegador servidor db requisição resposta

  102. None
  103. None
  104. None
  105. None
  106. None
  107. ip?

  108. None
  109. None
  110. None
  111. 200 reqs

  112. 200 reqs 100 reqs 100 reqs

  113. Balanceador de Carga

  114. Balanceador de Carga

  115. Balanceador de Carga

  116. None
  117. Mais requisições?

  118. None
  119. None
  120. None
  121. None
  122. Cluster

  123. None
  124. None
  125. Escalabilidade Horizontal (scale out)

  126. Apesar de mais barata…

  127. None
  128. (1a requisição)

  129. (1a requisição)

  130. Sessão

  131. (2a requisição) qual?

  132. (2a requisição)

  133. (2a requisição)

  134. Sticky Session

  135. Mas e se…

  136. None
  137. None
  138. None
  139. None
  140. None
  141. None
  142. ?

  143. ?

  144. Falta Redundância

  145. Passo 4
 (REPLICANDO ESTADO)

  146. None
  147. (1a requisição)

  148. (1a requisição)

  149. (2a requisição)

  150. (2a requisição)

  151. None
  152. Session Replication

  153. None
  154. None
  155. None
  156. None
  157. Replica Estado

  158. None
  159. Alta Disponibilidade (high availability)

  160. Mais requisições?

  161. None
  162. None
  163. None
  164. None
  165. Se tenho mais máquinas…

  166. None
  167. None
  168. None
  169. None
  170. Replicar sessão é CARO

  171. Passo 5
 (REMOVENDO ESTADO)

  172. None
  173. None
  174. None
  175. None
  176. ONDE?

  177. None
  178. None
  179. None
  180. None
  181. Cache Distribuído

  182. Cache Distribuído

  183. Cache Distribuído

  184. None
  185. STATELESS (shared nothing architecture)

  186. Mais requisições?

  187. None
  188. 256GB

  189. Todas plataformas

  190. Não escala ainda…

  191. Nuvens

  192. None
  193. e só então…

  194. None
  195. @rponte http://triadworks.com.br/ @triadworks