Entregando conteúdo em  ambientes extremos        na JVM                    ROd
ROdDesenvolvedor especialistaem arquiteturas de altaperformance relacionadas apublicação, busca e entregade conteúdo para ...
ObjetivoAumentar a disponibilidadeda entrega de conteúdo do          Portal
ObjetivoDiminuir acesso aosserviços de backend
ObjetivoSimplificar a infraestrutura de entrega de conteúdo
Objetivo   Suportar múltiplosformatos do conteúdo na      mesma URL
noticias.uol.com.br
noticias.uol.com.br
noticias.uol.com.br
MARRAKESH
PremissasEstado imutávelDetecção de User AgentCacheMelhores práticas do HTTPProxy da engine de template
Detecção de User AgentWURFL  – Web patchFast detection  – Bot  – Desktop
CacheCache replicado em todas as máquinas do poolSeparação entre conteúdo e máquina de estadoCache de conteúdo “gzipado”Bo...
HttpHandlerContent-Encoding: gzipETag e Last-Modified  – 11% da audiência ainda utiliza HTTP/1.0Cache-ControlConnection: C...
Ambiente original
Novo ambiente
PRÉ PRODUÇÃO
TestesTeste no hardware finalFerramentas:  – HAProxy  – ab, request-simulator, siege  – visualvm e visualgc
JVM-Xms == -Xmx-XX:+AggressiveOpts-XX:+UseAdaptiveSizePolicy-XX:+UseParNewGC-XX:ParallelGCThreads
JVM-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Dnetworkaddress.cache.ttl-Dnetworkaddress.cache.negative.ttl
EM PRODUÇÃO
MigraçãoBeta com noticias.uol.com.brMigração de todos os dominios de conteúdoem 2 meses  – 42 áreas principais  – Mais de ...
Apache DocRootApache envia redirect  – /busca → /busca/Problema: Algumas funções JavaScript seapoiavam nesta “feature”Erro...
Negando conexõesApós morte do Chico Anysio requisições nãoestabeleciamPico de 160k reqs/minuto por servidorPico de 3200 re...
Negando conexõesTentativas:  – Aumento de threads do Apache  – Pré alocação de threads do Apache  – Testes com nginxSoluçã...
Long GC Pauses– Requisições tinham tempo alto de respostasem nenhum evento especial– Análise de gc.log– Full GCs levando 1...
Long GC Pauses– Após o solução do problema anterior asalterações do Apache não foram desfeitas– Threads pré alocadas fizer...
500 Server Internal Error– Diversas requisições retornando 500– No mesmo momento outras retornando“200 OK” para o mesmo re...
500 Server Internal Error Suspeita: Connection Pool do Jetty Análise: Sniffer entre Apache e Jetty Problema:  – queryStrin...
Números15k ~ 150k reqs/min (230k no pico → 3833 req/s)98% cache hits125 Mbps (225 Mbps pico)55% de respostas “Not Modified...
Próximos passosSubstituir Jetty → NettyArmazenar uma semana de conteúdo emmemóriaIntegração com Metrics frameworkMigração ...
Obrigado =)http://slideshare.net/rzdrigo/entregando-conteudo-em-               ambientes-extremos-na-jvm
Entregando conteúdo em  ambientes extremos        na JVM                    ROd
Upcoming SlideShare
Loading in...5
×

Entregando conteúdo em ambientes extremos na JVM

777

Published on

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

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
777
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Entregando conteúdo em ambientes extremos na JVM

  1. 1. Entregando conteúdo em ambientes extremos na JVM ROd
  2. 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. 3. ObjetivoAumentar a disponibilidadeda entrega de conteúdo do Portal
  4. 4. ObjetivoDiminuir acesso aosserviços de backend
  5. 5. ObjetivoSimplificar a infraestrutura de entrega de conteúdo
  6. 6. Objetivo Suportar múltiplosformatos do conteúdo na mesma URL
  7. 7. noticias.uol.com.br
  8. 8. noticias.uol.com.br
  9. 9. noticias.uol.com.br
  10. 10. MARRAKESH
  11. 11. PremissasEstado imutávelDetecção de User AgentCacheMelhores práticas do HTTPProxy da engine de template
  12. 12. Detecção de User AgentWURFL – Web patchFast detection – Bot – Desktop
  13. 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. 14. HttpHandlerContent-Encoding: gzipETag e Last-Modified – 11% da audiência ainda utiliza HTTP/1.0Cache-ControlConnection: Close
  15. 15. Ambiente original
  16. 16. Novo ambiente
  17. 17. PRÉ PRODUÇÃO
  18. 18. TestesTeste no hardware finalFerramentas: – HAProxy – ab, request-simulator, siege – visualvm e visualgc
  19. 19. JVM-Xms == -Xmx-XX:+AggressiveOpts-XX:+UseAdaptiveSizePolicy-XX:+UseParNewGC-XX:ParallelGCThreads
  20. 20. JVM-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Dnetworkaddress.cache.ttl-Dnetworkaddress.cache.negative.ttl
  21. 21. EM PRODUÇÃO
  22. 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. 23. Apache DocRootApache envia redirect – /busca → /busca/Problema: Algumas funções JavaScript seapoiavam nesta “feature”Erro: /buscamontecarlo.htm → 404 Not Found
  24. 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. 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. 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. 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. 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. 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. 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. 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. 32. Obrigado =)http://slideshare.net/rzdrigo/entregando-conteudo-em- ambientes-extremos-na-jvm
  33. 33. Entregando conteúdo em ambientes extremos na JVM ROd
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×