Entregando conteúdo em ambientes extremos na JVM
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Entregando conteúdo em ambientes extremos na JVM

on

  • 986 views

Palestra apresentada no QCon SP em 05/08/2012.

Palestra apresentada no QCon SP em 05/08/2012.

Statistics

Views

Total Views
986
Views on SlideShare
974
Embed Views
12

Actions

Likes
1
Downloads
8
Comments
0

3 Embeds 12

http://www.linkedin.com 6
https://si0.twimg.com 3
https://twimg0-a.akamaihd.net 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Entregando conteúdo em ambientes extremos na JVM Presentation Transcript

  • 1. Entregando conteúdo em ambientes extremos na JVM ROd
  • 2. ROdDesenvolvedor especialistaem arquiteturas de altaperformance relacionadas apublicação, busca e entregade conteúdo para o portalUOL. Mestre pelo IME-USPem 07/2012 =) @rzdrigo
  • 3. ObjetivoAumentar a disponibilidadeda entrega de conteúdo do Portal
  • 4. ObjetivoDiminuir acesso aosserviços de backend
  • 5. ObjetivoSimplificar a infraestrutura de entrega de conteúdo
  • 6. Objetivo Suportar múltiplosformatos do conteúdo na mesma URL
  • 7. noticias.uol.com.br
  • 8. noticias.uol.com.br
  • 9. noticias.uol.com.br
  • 10. MARRAKESH
  • 11. PremissasEstado imutávelDetecção de User AgentCacheMelhores práticas do HTTPProxy da engine de template
  • 12. Detecção de User AgentWURFL – Web patchFast detection – Bot – Desktop
  • 13. CacheCache replicado em todas as máquinas do poolSeparação entre conteúdo e máquina de estadoCache de conteúdo “gzipado”Bots não adicionam conteúdo no cache
  • 14. HttpHandlerContent-Encoding: gzipETag e Last-Modified – 11% da audiência ainda utiliza HTTP/1.0Cache-ControlConnection: Close
  • 15. Ambiente original
  • 16. Novo ambiente
  • 17. PRÉ PRODUÇÃO
  • 18. TestesTeste no hardware finalFerramentas: – HAProxy – ab, request-simulator, siege – visualvm e visualgc
  • 19. JVM-Xms == -Xmx-XX:+AggressiveOpts-XX:+UseAdaptiveSizePolicy-XX:+UseParNewGC-XX:ParallelGCThreads
  • 20. JVM-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Dnetworkaddress.cache.ttl-Dnetworkaddress.cache.negative.ttl
  • 21. EM PRODUÇÃO
  • 22. MigraçãoBeta com noticias.uol.com.brMigração de todos os dominios de conteúdoem 2 meses – 42 áreas principais – Mais de 80 dominios
  • 23. Apache DocRootApache envia redirect – /busca → /busca/Problema: Algumas funções JavaScript seapoiavam nesta “feature”Erro: /buscamontecarlo.htm → 404 Not Found
  • 24. Negando conexõesApós morte do Chico Anysio requisições nãoestabeleciamPico de 160k reqs/minuto por servidorPico de 3200 reqs/segundo por servidor
  • 25. Negando conexõesTentativas: – Aumento de threads do Apache – Pré alocação de threads do Apache – Testes com nginxSolução: ajustes nos valores do sysctlnet.ipv4.ip_local_port_range e net.ipv4.tcp_tw_reuse
  • 26. Long GC Pauses– Requisições tinham tempo alto de respostasem nenhum evento especial– Análise de gc.log– Full GCs levando 12 ~ 15 segundos, mesmoapós ajustes em pré produção
  • 27. Long GC Pauses– Após o solução do problema anterior asalterações do Apache não foram desfeitas– Threads pré alocadas fizeram o servidorcomeçar a consumir swap– Monitoração da swap desativada
  • 28. 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 daaplicação
  • 29. 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 suportaUTF-8 – Somente IE realizava esta transformação
  • 30. Números15k ~ 150k reqs/min (230k no pico → 3833 req/s)98% cache hits125 Mbps (225 Mbps pico)55% de respostas “Not Modified” (304)Redução de consultas ao Sistema de busca – 500 → 250 queries/sec (-50%)
  • 31. Próximos passosSubstituir Jetty → NettyArmazenar uma semana de conteúdo emmemóriaIntegração com Metrics frameworkMigração de outros serviços para a plataforma
  • 32. Obrigado =)http://slideshare.net/rzdrigo/entregando-conteudo-em- ambientes-extremos-na-jvm
  • 33. Entregando conteúdo em ambientes extremos na JVM ROd