Entregando conteúdo em ambientes extremos na JVM

440 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.

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

Nenhuma nota no slide

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

×