Entregando conteúdo em ambientes extremos na JVM

33
Entregando conteúdo em ambientes extremos na JVM ROd

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.

Transcript of Entregando conteúdo em ambientes extremos na JVM

Page 1: Entregando conteúdo em ambientes extremos na JVM

Entregando conteúdo em ambientes extremos na JVM

ROd

Page 2: Entregando conteúdo em ambientes extremos na JVM

[email protected]

@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 =)

Page 3: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Objetivo

Aumentar a disponibilidade

da entrega de conteúdo do

Portal

Page 4: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Objetivo

Diminuir acesso aos

serviços de backend

Page 5: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Objetivo

Simplificar a infraestrutura

de entrega de conteúdo

Page 6: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Objetivo

Suportar múltiplos formatos

do conteúdo na mesma URL

Page 7: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

noticias.uol.com.br

Page 8: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

noticias.uol.com.br

Page 9: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

noticias.uol.com.br

Page 10: Entregando conteúdo em ambientes extremos na JVM

MARRAKESH

Page 11: Entregando conteúdo em ambientes extremos na JVM

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

Page 12: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Detecção de User Agent

• WURFL

● Web patch

• Fast detection

● Bot

● Desktop

Page 13: Entregando conteúdo em ambientes extremos na JVM

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

Page 14: Entregando conteúdo em ambientes extremos na JVM

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

Page 15: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Ambiente original

Page 16: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Novo ambiente

Page 17: Entregando conteúdo em ambientes extremos na JVM

PRÉ PRODUÇÃO

Page 18: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

Testes

• Teste no hardware final

• Ferramentas

● HAProxy

● ab, request-simulator, siege

● visualvm e visualgc

Page 19: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

JVM

• -Xms == -Xmx

• -XX:+AggressiveOpts

• -XX:+UseAdaptiveSizePolicy

• -XX:+UserParNewGC

• -XX:ParallelGCThreads

Page 20: Entregando conteúdo em ambientes extremos na JVM

Academia UOL 06/07/2012

JVM

• -verbose:gc

• -XX:+PrintGCDetails

• -XX:+PrintGCDateStamps

• -Dnetworkaddress.cache.ttl

• -Dnetworkaddress.cache.negative.ttl

Page 21: Entregando conteúdo em ambientes extremos na JVM

EM PRODUÇÃO

Page 22: Entregando conteúdo em ambientes extremos na JVM

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

Page 23: Entregando conteúdo em ambientes extremos na JVM

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

Page 24: Entregando conteúdo em ambientes extremos na JVM

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

Page 25: Entregando conteúdo em ambientes extremos na JVM

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

Page 26: Entregando conteúdo em ambientes extremos na JVM

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

Page 27: Entregando conteúdo em ambientes extremos na JVM

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

Page 28: Entregando conteúdo em ambientes extremos na JVM

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

Page 29: Entregando conteúdo em ambientes extremos na JVM

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

Page 30: Entregando conteúdo em ambientes extremos na JVM

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%)

Page 31: Entregando conteúdo em ambientes extremos na JVM

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

Page 32: Entregando conteúdo em ambientes extremos na JVM

Apresentação disponível em http://www.uolhost.com.br/ciclodepalestras/

Page 33: Entregando conteúdo em ambientes extremos na JVM

Entregando conteúdo em ambientes extremos na JVM

ROd