JAVA PARA MILHÕES DE ACESSOS ROBERTO MARIN robertomarin[at]gmail.com https://slides.com/robertomarin/arquiteturas-java-milhoes-acessos BACKSTAGE DE UM GRANDE PORTAL CONCEITOS SCALABILITY ESCALABILIDADE HIGH AVAILABILITY ALTA DISPONIBILIDADE SINGLE POINT OF FAILURE MICRO SERVICES PONTO ÚNICO DE FALHA MICRO SERVIÇOS DISASTER RECOVERY DR SCALABILITY ESCALABILIDADE DATABASE SCALABILITY ESCALABILIDADE SINGLE POINT OF FAILURE PONTO ÚNICO DE FALHA SINGLE POINT OF FAILURE PONTO ÚNICO DE FALHA HIGH AVAILABILITY ALTA DISPONIBILIDADE DATACENTER A DATACENTER B MICRO SERVICES MICRO SERVIÇOS MICRO SERVICES MICRO SERVIÇOS MICRO SERVICES MICRO SERVIÇOS DISASTER RECOVERY DR A B DR COMO SERIA UMA ARQUITETURA COM TODOS ESSES CONCEITOS? ESCALÁVEL, ALTAMENTE DISPONÍVEL, SEM PONTOS ÚNICOS DE FALHA E COM DR ESCALÁVEL, ALTAMENTE DISPONÍVEL, SEM PONTOS ÚNICOS DE FALHA E UM DR PARA CADA MICRO SERVIÇO PRODUTOS PROBLEMAS FOCO O QUE O CONSUMIDOR QUER PRIMEIRA VERSÃO O QUE O CONSUMIDOR QUER A SEGUNDA VERSÃO O QUE O CONSUMIDOR QUER B PRIMEIRA VERSÃO O QUE O CONSUMIDOR A QUER OUTRA ABORDAGEM O QUE O CONSUMIDOR QUER? UM EXEMPLO REAL O.S. O.S. S. ENTÃO, NUNCA DEVO REFAZER NADA? CONTEÚDO, CONTEÚDO, e mais conteúdo. PANDA PENGUIN HUMMINGBIRD TAMANHO DAS PAGINAS DA AMAZON COMO RECUPERAR TANTA INFORMAÇÃO? MICRO SERVICES LEMBRA? QUANTOS SERVIÇOS UMA PÁGINA DA AMAZON.COM CHAMA POR REQUEST? 150 PER FOR MANCE PARAMETROS JVM www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html -XX:+AggressiveHeap -XX:+AggressiveOps -XX:+UseCompressedOops SOMENTE JAVA 8 -XX:+UseStringDeduplicationJVM GARBAGE COLLECTOR SERIAL COLLECTOR -XX:+UseSerialGC PARALLEL COLLECTOR -XX:-UseParallelGC CONCURRENT MARK SWEEP -XX:+UseConcMarkSweepGC GARBAGE FIRST COLLECTOR –XX:+UseG1GC PERMANENT GENERATION METASPACE JAVA E MEMÓRIA :@ Xmx Xms Xmn? JAVA E MEMÓRIA :@ Xmx Xms Xmn? class MemoryTest VISUALVM printf("<html>") . . . printf("</html>") VISUALVM class ThreadTest OPENJDK: JMH @Benchmark void methodA() { // versão A... } @Benchmark void methodB() { // versão B... } OPENJDK: JMH Benchmark SuaClasse.metodoA SuaClasse.metodoB Mode avgt avgt Samples 10 10 Mean 17.588 10.796 MeanError 0.230 0.063 Units ns/op ns/op APACHE BENCH - AB ab -c 10 -n 1000 http://www.vivareal.com.br/ APACHE BENCH - AB Percentage of the requests served within a certain time (ms) 50% 58 66% 60 75% 63 80% 65 90% 67 95% 69 98% 71 99% 72 100% 72 (longest request) JAVA BUSCAS EM LISTA class ListTest JAVA E FALHA NOSSA :@ BOOTSTRAP 20s BOOTSTRAP BOOTSTRAP CACHE CACHE TRADICIONAL CACHE + HA CDN DEVOPS E TALVEZ A DICA MAIS IMPORTANTE DE TODAS ASSÍNCRONO. ASSÍNCRONO. JAVA PARA MILHÕES DE ACESSOS OBRIGADO! _ :) ROBERTO MARIN robertomarin[at]gmail.com https://slides.com/robertomarin/arquiteturas-java-milhoes-acessos