View
278
Download
2
Category
Preview:
DESCRIPTION
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.
Citation preview
Entregando conteúdo em ambientes extremos na JVM
ROd
ROdrzaccara@uolinc.com
@rzdrigo
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 =)
Academia UOL 06/07/2012
Objetivo
Aumentar a disponibilidade
da entrega de conteúdo do
Portal
Academia UOL 06/07/2012
Objetivo
Diminuir acesso aos
serviços de backend
Academia UOL 06/07/2012
Objetivo
Simplificar a infraestrutura
de entrega de conteúdo
Academia UOL 06/07/2012
Objetivo
Suportar múltiplos formatos
do conteúdo na mesma URL
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 Agent
• Cache
• Melhores práticas do HTTP
• Proxy da engine de template
Academia UOL 06/07/2012
Detecção de User Agent
• WURFL
● Web patch
• Fast detection
● Bot
● Desktop
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
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
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
• Ferramentas
● HAProxy
● ab, request-simulator, siege
● visualvm e visualgc
Academia UOL 06/07/2012
JVM
• -Xms == -Xmx
• -XX:+AggressiveOpts
• -XX:+UseAdaptiveSizePolicy
• -XX:+UserParNewGC
• -XX:ParallelGCThreads
Academia UOL 06/07/2012
JVM
• -verbose:gc
• -XX:+PrintGCDetails
• -XX:+PrintGCDateStamps
• -Dnetworkaddress.cache.ttl
• -Dnetworkaddress.cache.negative.ttl
EM PRODUÇÃO
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
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
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
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
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
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
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
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
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%)
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
Apresentação disponível em http://www.uolhost.com.br/ciclodepalestras/
Entregando conteúdo em ambientes extremos na JVM
ROd
Recommended