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
Upcoming SlideShare
Loading in …5
×

Entregando conteúdo em ambientes extremos na JVM

393 views
335 views

Published on

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 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
393
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for 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

×