SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Entregando conteúdo em
  ambientes extremos
        na JVM
                    ROd
ROd
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 =)
                          @rzdrigo
Objetivo



Aumentar a disponibilidade
da entrega de conteúdo do
          Portal
Objetivo



Diminuir acesso aos
serviços de backend
Objetivo



Simplificar a infraestrutura
 de entrega de conteúdo
Objetivo



   Suportar múltiplos
formatos do conteúdo na
      mesma URL
noticias.uol.com.br
noticias.uol.com.br
noticias.uol.com.br
MARRAKESH
Premissas

Estado imutável

Detecção de User Agent

Cache

Melhores práticas do HTTP

Proxy da engine de template
Detecção de User Agent

WURFL

  – Web patch

Fast detection

  – Bot

  – Desktop
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
HttpHandler

Content-Encoding: gzip

ETag e Last-Modified

  – 11% da audiência ainda utiliza HTTP/1.0

Cache-Control

Connection: Close
Ambiente original
Novo ambiente
PRÉ PRODUÇÃO
Testes

Teste no hardware final

Ferramentas:

  – 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ção

Beta com noticias.uol.com.br

Migração de todos os dominios de conteúdo
em 2 meses

  – 42 áreas principais

  – Mais de 80 dominios
Apache DocRoot

Apache envia redirect

  – /busca → /busca/

Problema: Algumas funções JavaScript se
apoiavam nesta “feature”

Erro: /buscamontecarlo.htm → 404 Not Found
Negando conexões

Após morte do Chico Anysio requisições não
estabeleciam

Pico de 160k reqs/minuto por servidor

Pico de 3200 reqs/segundo por servidor
Negando conexões

Tentativas:

  – Aumento de threads do Apache

  – Pré alocação de threads do Apache

  – Testes com nginx

Solução: ajustes nos valores do sysctl
net.ipv4.ip_local_port_range e net.ipv4.tcp_tw_reuse
Long GC Pauses

– Requisições tinham tempo alto de resposta
sem nenhum evento especial

– Análise de gc.log

– Full GCs levando 12 ~ 15 segundos, mesmo
após ajustes em pré produção
Long GC Pauses

– Após o solução do problema anterior as
alterações do Apache não foram desfeitas

– Threads pré alocadas fizeram o servidor
começar a consumir swap

– Monitoração da swap desativada
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
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
Números

15k ~ 150k reqs/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/sec (-50%)
Próximos passos

Substituir Jetty → Netty

Armazenar uma semana de conteúdo em
memória

Integração com Metrics framework

Migração de outros serviços para a plataforma
Obrigado =)
http://slideshare.net/rzdrigo/entregando-conteudo-em-
               ambientes-extremos-na-jvm
Entregando conteúdo em
  ambientes extremos
        na JVM
                    ROd

Mais conteúdo relacionado

Mais procurados

JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - AvançadoAdriano Schmidt
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015Adriano Schmidt
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website CacheavelLucas Brasilino
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Bruno Pedro
 
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPAndré Déo
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Tiago Hillebrandt
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIMatheus Espanhol
 
De A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampDe A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampAndré Déo
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Felipe Blini
 
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoelliando dias
 

Mais procurados (19)

De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
Slides nginx
Slides nginxSlides nginx
Slides nginx
 
WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015WildFly Avançado - TDC Floripa 2015
WildFly Avançado - TDC Floripa 2015
 
Servidor proxy Squid
Servidor proxy SquidServidor proxy Squid
Servidor proxy Squid
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website Cacheavel
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
 
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool II
 
De A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampDe A a Zabbix Devry Metrocamp
De A a Zabbix Devry Metrocamp
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
 
A busca pelo deploy continuo
A busca pelo deploy continuoA busca pelo deploy continuo
A busca pelo deploy continuo
 
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinito
 

Semelhante a Entrega conteúdo ambientes extremos JVM

Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMRodrigo Zaccara
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsJorge Walendowsky
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Ricardo Katz
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações webJean Carlo Emer
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...Mauro Risonho de Paula Assumpcao
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishLucas Brasilino
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 

Semelhante a Entrega conteúdo ambientes extremos JVM (20)

Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVM
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.js
 
Performance Web com ASP.NET MVC
Performance Web com ASP.NET MVCPerformance Web com ASP.NET MVC
Performance Web com ASP.NET MVC
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3
 
dnad12
dnad12dnad12
dnad12
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações web
 
Talk at QConSP
Talk at QConSPTalk at QConSP
Talk at QConSP
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 

Mais de Rodrigo Zaccara

C6 Bank: um banco com personalidade
C6 Bank: um banco com personalidadeC6 Bank: um banco com personalidade
C6 Bank: um banco com personalidadeRodrigo Zaccara
 
Anotação e classificação automática de entidades nomeadas em notícias esporti...
Anotação e classificação automática de entidades nomeadas em notícias esporti...Anotação e classificação automática de entidades nomeadas em notícias esporti...
Anotação e classificação automática de entidades nomeadas em notícias esporti...Rodrigo Zaccara
 
Alta perfomance com Lucene
Alta perfomance com LuceneAlta perfomance com Lucene
Alta perfomance com LuceneRodrigo Zaccara
 
Classificação automática de notícias em português do Brasil
Classificação automática de notícias em português do BrasilClassificação automática de notícias em português do Brasil
Classificação automática de notícias em português do BrasilRodrigo Zaccara
 
Lucene nas alturas: 400 buscas por segundo
Lucene nas alturas: 400 buscas por segundoLucene nas alturas: 400 buscas por segundo
Lucene nas alturas: 400 buscas por segundoRodrigo Zaccara
 

Mais de Rodrigo Zaccara (7)

C6 Bank: um banco com personalidade
C6 Bank: um banco com personalidadeC6 Bank: um banco com personalidade
C6 Bank: um banco com personalidade
 
Entregando ideias
Entregando ideiasEntregando ideias
Entregando ideias
 
Anotação e classificação automática de entidades nomeadas em notícias esporti...
Anotação e classificação automática de entidades nomeadas em notícias esporti...Anotação e classificação automática de entidades nomeadas em notícias esporti...
Anotação e classificação automática de entidades nomeadas em notícias esporti...
 
WebSockets
WebSocketsWebSockets
WebSockets
 
Alta perfomance com Lucene
Alta perfomance com LuceneAlta perfomance com Lucene
Alta perfomance com Lucene
 
Classificação automática de notícias em português do Brasil
Classificação automática de notícias em português do BrasilClassificação automática de notícias em português do Brasil
Classificação automática de notícias em português do Brasil
 
Lucene nas alturas: 400 buscas por segundo
Lucene nas alturas: 400 buscas por segundoLucene nas alturas: 400 buscas por segundo
Lucene nas alturas: 400 buscas por segundo
 

Entrega conteúdo ambientes extremos JVM