Top Banner
Entregando conteúdo em ambientes extremos na JVM ROd
33

Entregando conteúdo em ambientes extremos na JVM

Jun 27, 2015

Download

Documents

Rodrigo Zaccara

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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