SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Entregando conteúdo
em ambientes extremos na JVM
                     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 =)

             ROd
rzaccara@uolinc.com
          @rzdrigo
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

Contenu connexe

Similaire à Entrega conteúdo JVM extremos

Apresentacao Interna GAE
Apresentacao Interna GAEApresentacao Interna GAE
Apresentacao Interna GAEMarcio Mangar
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - AvançadoAdriano Schmidt
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...George Vieira Jr.
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Rodolfo Fadino Junior
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
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
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxHelder da Rocha
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
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
 

Similaire à Entrega conteúdo JVM extremos (20)

Apresentacao Interna GAE
Apresentacao Interna GAEApresentacao Interna GAE
Apresentacao Interna GAE
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
Performance Web com ASP.NET MVC
Performance Web com ASP.NET MVCPerformance Web com ASP.NET MVC
Performance Web com ASP.NET MVC
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performa...
 
Python na Nuvem
Python na NuvemPython na Nuvem
Python na Nuvem
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
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?
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao Ajax
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
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,
 

Entrega conteúdo JVM extremos

  • 1. Entregando conteúdo em ambientes extremos na JVM ROd
  • 2. 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 =) ROd rzaccara@uolinc.com @rzdrigo
  • 3. Academia UOL 06/07/2012 Objetivo Aumentar a disponibilidade da entrega de conteúdo do Portal
  • 4. Academia UOL 06/07/2012 Objetivo Diminuir acesso aos serviços de backend
  • 5. Academia UOL 06/07/2012 Objetivo Simplificar a infraestrutura de entrega de conteúdo
  • 6. Academia UOL 06/07/2012 Objetivo Suportar múltiplos formatos do conteúdo na mesma URL
  • 7. Academia UOL 06/07/2012 noticias.uol.com.br
  • 8. Academia UOL 06/07/2012 noticias.uol.com.br
  • 9. Academia UOL 06/07/2012 noticias.uol.com.br
  • 11. 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
  • 12. Academia UOL 06/07/2012 Detecção de User Agent • WURFL ● Web patch • Fast detection ● Bot ● Desktop
  • 13. 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
  • 14. 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
  • 15. Academia UOL 06/07/2012 Ambiente original
  • 16. Academia UOL 06/07/2012 Novo ambiente
  • 18. Academia UOL 06/07/2012 Testes • Teste no hardware final • Ferramentas ● HAProxy ● ab, request-simulator, siege ● visualvm e visualgc
  • 19. Academia UOL 06/07/2012 JVM • -Xms == -Xmx • -XX:+AggressiveOpts • -XX:+UseAdaptiveSizePolicy • -XX:+UserParNewGC • -XX:ParallelGCThreads
  • 20. Academia UOL 06/07/2012 JVM • -verbose:gc • -XX:+PrintGCDetails • -XX:+PrintGCDateStamps • -Dnetworkaddress.cache.ttl • -Dnetworkaddress.cache.negative.ttl
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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%)
  • 31. 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
  • 33. Entregando conteúdo em ambientes extremos na JVM ROd