O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Entregando conteúdoem ambientes extremos na JVM                     ROd
Desenvolvedor especialista                      em arquiteturas de alta                      performance relacionadas     ...
Academia UOL                                06/07/2012  Objetivo               Aumentar a disponibilidade               da...
Academia UOL                         06/07/2012  Objetivo               Diminuir acesso aos               serviços de back...
Academia UOL                                  06/07/2012  Objetivo               Simplificar a infraestrutura             ...
Academia UOL                                 06/07/2012  Objetivo               Suportar múltiplos formatos               ...
Academia UOL            06/07/2012  noticias.uol.com.br
Academia UOL            06/07/2012  noticias.uol.com.br
Academia UOL            06/07/2012  noticias.uol.com.br
MARRAKESH
Academia UOL                               06/07/2012  Premissas           • Estado imutável           • Detecção de User ...
Academia UOL                   06/07/2012  Detecção de User Agent           • WURFL               ●                   Web ...
Academia UOL                                         06/07/2012  Cache           • Cache replicado em todas as máquinas   ...
Academia UOL                                           06/07/2012  HttpHandler           • Content-Encoding: gzip         ...
Academia UOL          06/07/2012  Ambiente original
Academia UOL      06/07/2012  Novo ambiente
PRÉ PRODUÇÃO
Academia UOL                                      06/07/2012  Testes           • Teste no hardware final           • Ferra...
Academia UOL                              06/07/2012  JVM           • -Xms == -Xmx           • -XX:+AggressiveOpts        ...
Academia UOL                                       06/07/2012  JVM           • -verbose:gc           • -XX:+PrintGCDetails...
EM PRODUÇÃO
Academia UOL                                    06/07/2012  Migração           • Beta com noticias.uol.com.br           • ...
Academia UOL                                                06/07/2012  Apache DocRoot           • Apache envia redirect  ...
Academia UOL                                          06/07/2012  Negando conexões           • Após morte do Chico Anysio ...
Academia UOL                                                                06/07/2012  Negando conexões           • Tenta...
Academia UOL                                         06/07/2012  Long GC Pauses           • Requisições tinham tempo alto ...
Academia UOL                                          06/07/2012  Long GC Pauses           • Após resolução do problema an...
Academia UOL                                       06/07/2012  500 Server Internal Error           • Diversas requisições ...
Academia UOL                                                 06/07/2012  500 Server Internal Error           • Suspeita: C...
Academia UOL                                                  06/07/2012  Números           •   15 ~ 150 req/min (230k no ...
Academia UOL                                       06/07/2012  Próximos passos           • Substituir Jetty → Netty       ...
Apresentação disponível emhttp://www.uolhost.com.br/ciclodepalestras/
Entregando conteúdoem ambientes extremos na JVM                     ROd
Próximos SlideShares
Carregando em…5
×

Entregando conteúdo em ambientes extremos na JVM

461 visualizações

Publicada em

Palestra realizada no evento "É dia de Java" em 24/08/2012 (http://www2.dc.ufscar.br/diadejava/) sobre a plataforma de entrega de conteúdo do UOL.

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Entregando conteúdo em ambientes extremos na JVM

  1. 1. Entregando conteúdoem ambientes extremos na JVM ROd
  2. 2. Desenvolvedor especialista em arquiteturas de alta performance relacionadas a publicação, busca e entrega de conteúdo para o portal UOL. Mestre pelo IME-USP em 07/2012 =) ROdrzaccara@uolinc.com @rzdrigo
  3. 3. Academia UOL 06/07/2012 Objetivo Aumentar a disponibilidade da entrega de conteúdo do Portal
  4. 4. Academia UOL 06/07/2012 Objetivo Diminuir acesso aos serviços de backend
  5. 5. Academia UOL 06/07/2012 Objetivo Simplificar a infraestrutura de entrega de conteúdo
  6. 6. Academia UOL 06/07/2012 Objetivo Suportar múltiplos formatos do conteúdo na mesma URL
  7. 7. Academia UOL 06/07/2012 noticias.uol.com.br
  8. 8. Academia UOL 06/07/2012 noticias.uol.com.br
  9. 9. Academia UOL 06/07/2012 noticias.uol.com.br
  10. 10. MARRAKESH
  11. 11. Academia UOL 06/07/2012 Premissas • Estado imutável • Detecção de User Agent • Cache • Melhores práticas do HTTP • Proxy da engine de template
  12. 12. Academia UOL 06/07/2012 Detecção de User Agent • WURFL ● Web patch • Fast detection ● Bot ● Desktop
  13. 13. Academia UOL 06/07/2012 Cache • Cache replicado em todas as máquinas do pool • Separação entre conteúdo e máquina de estado • Cache de conteúdo “gzipado” • Bots não adicionam conteúdo no cache
  14. 14. Academia UOL 06/07/2012 HttpHandler • Content-Encoding: gzip • Etag e Last-Modified ● 11% da audiência utiliza HTTP/1.0 • Cache-Control • Connection: close
  15. 15. Academia UOL 06/07/2012 Ambiente original
  16. 16. Academia UOL 06/07/2012 Novo ambiente
  17. 17. PRÉ PRODUÇÃO
  18. 18. Academia UOL 06/07/2012 Testes • Teste no hardware final • Ferramentas ● HAProxy ● ab, request-simulator, siege ● visualvm e visualgc
  19. 19. Academia UOL 06/07/2012 JVM • -Xms == -Xmx • -XX:+AggressiveOpts • -XX:+UseAdaptiveSizePolicy • -XX:+UserParNewGC • -XX:ParallelGCThreads
  20. 20. Academia UOL 06/07/2012 JVM • -verbose:gc • -XX:+PrintGCDetails • -XX:+PrintGCDateStamps • -Dnetworkaddress.cache.ttl • -Dnetworkaddress.cache.negative.ttl
  21. 21. EM PRODUÇÃO
  22. 22. Academia UOL 06/07/2012 Migração • Beta com noticias.uol.com.br • Migração de todos os domínios de coteúdo em 2 meses ● 42 áreas principais ● Mais de 80 domínios
  23. 23. Academia UOL 06/07/2012 Apache DocRoot • Apache envia redirect ● /busca → /busca/ • Problema: Algumas funções JavaScript se apoiavam nesta “feature” • Erro: /buscamontecarlo.htm → 404 Not Found
  24. 24. Academia UOL 06/07/2012 Negando conexões • Após morte do Chico Anysio requisições não estabeleciam • Pico de 160k req/minuto por servidor • Pico de 3200 req/segundo por servidor
  25. 25. Academia UOL 06/07/2012 Negando conexões • Tentativas: ● Aumento de threads do Apache ● Pré alocação de threads do Apache ● Testes com nginx ● Solução: ajuestes nos valores do sysctl net.ipv4.ip_local_port_range e net.ipv4.tcp_tw_reuse
  26. 26. Academia UOL 06/07/2012 Long GC Pauses • Requisições tinham tempo alto de resposta sem nenhum evento especial • Análise de gc.log • FullGCs levando 12 ~ 15 segundos, mesmo após ajustes em pré produção
  27. 27. Academia UOL 06/07/2012 Long GC Pauses • Após resolução do problema anterior as alterações do Apache não foram desfeitas • Thread pré alocadas fizeram o servidor começar a consumir swap • Monitoração da swap desativada
  28. 28. Academia UOL 06/07/2012 500 Server Internal Error • Diversas requisições retornando 500 • No mesmo momento outras retornando “200 OK” para o mesmo resource • Nenhuma mensagem de erro no log da aplicação
  29. 29. Academia UOL 06/07/2012 500 Server Internal Error • Suspeita: Connection Pool do Jetty • Análise: Sniffer entre Apache e Jetty • Problema: ● queryString no Apache 2.0.x não suporta UTF-8 ● Somente IE realizava esta transformação
  30. 30. Academia UOL 06/07/2012 Números • 15 ~ 150 req/min (230k no pico → 3833 req/s) • 98% cache hits • 125 Mbps (225 Mbps pico) • 55% de respostas “Not Modified” (304) • Redução de consultas ao Sistema de busca ● 500 → 250 queries/segundo (-50%)
  31. 31. Academia UOL 06/07/2012 Próximos passos • Substituir Jetty → Netty • Armazenar uma semana de conteúdo em memória • Integração com o Metrics framework • Migração de outros serviços para a plataforma
  32. 32. Apresentação disponível emhttp://www.uolhost.com.br/ciclodepalestras/
  33. 33. Entregando conteúdoem ambientes extremos na JVM ROd

×