SlideShare a Scribd company logo
1 of 45
Entregando imagens na
Internet
Caio Tedim
Agenda
• Problemas
• Objetivo
• Escopo
• Arquitetura
• Desafios em Produção
• Solução
• Próximos Passos
• Resultados
• Um pouco mais sobre o Varnish
• Perguntas
• Referências
Problemas
• Muitos servidores (16+27)
• Percepção na demora no carregamento das
imagens
• Muita leitura em disco
• Muita dependência de NFS
Objetivo
• Aumentar a disponibilidade e otimizar a
entrega das imagens do Portal
• Diminuir acessos de leitura ao disco
• Simplificar a infraestrutura de imagens
• Desafio -> diminuir de 27 máquinas para 8 ($$$)
Escopo
• Mostrar a solução adotada comparando os
dois cenários (antes e depois)
• Resultados obtidos
• Breve workshop sobre o Varnish
Do que falamos?
• Quantidade de imagens servidas por dia
• ~ 4.512.904.784
• Imagens únicas: ~ 784.215
• Tráfego estimado por dia
• ~ 59.2GB
• Requisições por segundo
• ~ 80k
Arquitetura Inicial
Arquitetura Adotada
Arquitetura
Comparativo: Varnish x Nginx
• Por que o varnish?
• Por que não continuar com o nginx?
Varnish Nginx
Hits per second (k) 16 15
Longest Transaction (sec) 0,05 3,12
CPU (%) 1,3 0,6
Load Avg 0,01 0,22
0
2
4
6
8
10
12
14
16
18
Carga Máxima
Comparativo: Varnish x Nginx
Varnish Nginx
Hits per second (k) 3 3
Longest Transaction (sec) 0,01 0,12
CPU (%) 0,9 0,4
Load Avg 0,01 0,13
0
0,5
1
1,5
2
2,5
3
3,5
Cenário de Produção
Desafios Superados em Produção
Sim, tivemos problemas!!
Desafios Superados em Produção
• Varnish: Não interpreta os url code
Ex.
– Hífen(“-”) → (%20)
– Interrogação(“?”) → (%3F)
– Solução foi aplicar o vmod URLCode
diponibilizado pelo varnish-cache.org
Desafios Superados em Produção
• Varnish: Reiniciava o processo filho
– All worker threads can block on the vcl_pipe
under high load
– Solução foi aplicar o patch 0010-varnishd-
optimize-epoll-thread.patch
Desafios Superados em Produção
• Imagens invertidas
– Com o Keep-Alive ativado, é ativo o
pipelining que causava a inversão de algumas
imagens no Safari do iPad e iPhone
– Solução foi fazer um tratamento para o
User-Agent do iPad e iPhone
Desafios Superados em Produção
• Falha excessiva de timeout (408) e load
da máquina alto
– Tempo de entrega superior a 30 segundos
– Solução foi realizar espalhamento das
imagens limitando seu número dentro de um
único diretório e aplicar o vmod digest para a
tradução da url.
Desafios Superados em Produção
• Exemplo
http://n.i.uol.com.br/ultnot/album/111007afeganistao_f_040.jpg
http://n.i.uol.com.br/_md5/a/c0/ce64ea3f9353730f5b100b74f0261.jpg
Desafios Superados em Produção
Total ~ 8.203.459
~ 72 hrs
+250GB
Quantidade Domínio
1.825.441 w3.i.uol.com.br
1.652.733 n.i.uol.com.br
1.251.104 e.i.uol.com.br
1.243.172 j.i.uol.com.br
841.429 tv.i.uol.com.br
613.705 es.i.uol.com.br
294.164 d.i.uol.com.br
226.604 ci.i.uol.com.br
187.547 ce.imguol.com
Desafios Superados em Produção
E agora, foi sucesso???
Desafios Superados em Produção
NÃO
Desafios Superados em Produção
• Falha excessiva de timeout (408) e load da
máquina alto
– Tempo de entrega superior a 30 segundos
– Solução foi realizar um upgrade no kernel
– de 2.6.32-71 para 2.6.32-358.2.1
Desafios Superados em Produção
INFO: task httpd:30126 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
httpd D ffffffffffffffff 0 30126 26948 0x00000080
ffff8803bf9b7bb8 0000000000000082 ffff8803bf9b7b28 ffffffff81184b6a
ffff8801aade6780 ffff8801adf36ec0 ffff8803bf9b7b98 ffffffffa0240f97
ffff8803c6fffb18 ffff8803bf9b7fd8 0000000000010518 ffff8803c6fffb18
Call Trace:
[<ffffffff81184b6a>] ? dput+0x9a/0x150
[<ffffffffa0240f97>] ? nfs_lookup_revalidate+0x207/0x5e0 [nfs]
[<ffffffff814c97ae>] __mutex_lock_slowpath+0x13e/0x180
[<ffffffffa023f011>] ? nfs_do_access+0x141/0x420 [nfs]
[<ffffffff814c964b>] mutex_lock+0x2b/0x50
[<ffffffff8117a4d3>] do_lookup+0xd3/0x220
[<ffffffff8117b145>] __link_path_walk+0x6f5/0x1040
[<ffffffff8117bd1a>] path_walk+0x6a/0xe0
[<ffffffff8117beeb>] do_path_lookup+0x5b/0xa0
[<ffffffff8117cb57>] user_path_at+0x57/0xa0
[<ffffffff81091ca0>] ? autoremove_wake_function+0x0/0x40
[<ffffffff81171d3c>] vfs_fstatat+0x3c/0x80
[<ffffffff81171eab>] vfs_stat+0x1b/0x20
[<ffffffff81171ed4>] sys_newstat+0x24/0x50
[<ffffffff810d40a2>] ? audit_syscall_entry+0x272/0x2a0
[<ffffffff81013172>] system_call_fastpath+0x16/0x1b
INFO: task httpd:30126 blocked for more than 120 seconds.
Explicando a solução
A solução
A solução
Opção pelo uso do Varnish e desenvolvimento
de ferramenta para otimização de imagens
- imagine
A solução
O Varnish
Varnish
• Open Source
• Acelerador HTTP
• Servidor de proxy reverso
• Balanceador de carga
• 64bit, muito rápido
• Comportamento programável
• Não aceita ssl!!!
Por que não SSL?
0
50.000
100.000
150.000
200.000
250.000
300.000
350.000
400.000
OpenSSL Varnish
Nº linhas
• Quantidade de linhas
• Código complexo, com comentários duvidosos
O que fazer com ssl ?
Varnish
Varnish
• Quantidade requisições http 4.512.904.784/dia
• Quantidade requisições https 24.565.952/dia
99,09%
0,91%
0,00%
20,00%
40,00%
60,00%
80,00%
100,00%
120,00%
http https
Requisições por dia
A solução
O Imagine
Imagine
• O que é?
- Servlet (Java 7) desenvolvida por ROd e
Leonardo Nickel (Time de CMS)
- Libs utilizadas
- optipng
- GraphicsMagic
- WebP
- jpegtran
Imagine
• Como funciona o Imagine?
- Remove exif (metainformações)
- Otimiza a paleta de cores
• WebP
- PNG: 26% menor
- JPEG/JPG: 25-34% menor
Imagine
Imagine
32K jpg/webp
60K jpg
Próximos Passos
 Aumentar o cache do Varnish
o Aumentar o tempo do objeto em cache
o Fazer o Varnish ir buscar o objeto requisitado
no Varnish vizinho, caso não tenha no cache
o Migrar os domínios de.i.uol.com.br,
simguol.com e ads.imguol.com
 Aplicar o patch de correção de load para as
demais máquinas
Resultados
• Carregamento das páginas mais rápidas
• Melhora na experiência do usuário
• Cache mais eficiente, minimizando o
acesso ao backend
• Menor tráfego de banda
Um pouco mais sobre Varnish
Varnish
• Varnishd
• Varnishlog
• Varnishncsa
Varnish
• Varnishd
– VCL (Varnish Configuration Language)
– Cache do varnish pode utilizar até o dobro
da memória mencionada
Varnish
• Varnishlog
– Log em memória
Varnish
• Varnishncsa
– NCSA combined log format
Client_IP_address -User_Name [Date:Time -TimeZone] "Method Object
HTTP_version" HTTP_StatusCode BytesSent
Varnish
Perguntas
Referências
• http://www.varnish-cache.org
• https://www.varnish-cache.org/docs/trunk/phk/ssl.html
• http://www.youtube.com/watch?feature=player_embedded&v=eAbamezUOjs
• https://www.varnish-cache.org/docs/3.0/reference/varnishd.html
• https://www.varnish-cache.org/trac/ticket/1285
• https://developers.google.com/speed/webp/
• https://developers.google.com/speed/docs/best-practices/payload
• https://www.varnish-cache.org/docs/3.0/tutorial/sizing_your_cache.html
Fim
Obrigado
Caio Tedim Francisco – cfrancisco@uoldiveo.com

More Related Content

Viewers also liked

[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous DeliverySamanta Cicilia
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de ValorSamanta Cicilia
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horasSamanta Cicilia
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre VarnishLocaweb
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerTiago Bezerra Dos Santos
 
Primeira Aula do Curso de Hardening
Primeira Aula do Curso de HardeningPrimeira Aula do Curso de Hardening
Primeira Aula do Curso de HardeningDell Technologies
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémLocaweb
 
Aula14 vsftp de-introopenldap
Aula14 vsftp de-introopenldapAula14 vsftp de-introopenldap
Aula14 vsftp de-introopenldapRoberto Castro
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCOTIC-PROEG (UFPA)
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
Hardening linux
Hardening linuxHardening linux
Hardening linuxhdoria
 
Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Flavio Torres
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuningDell Technologies
 

Viewers also liked (20)

[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre Varnish
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu Server
 
Primeira Aula do Curso de Hardening
Primeira Aula do Curso de HardeningPrimeira Aula do Curso de Hardening
Primeira Aula do Curso de Hardening
 
Rh401 rhel5.2
Rh401 rhel5.2Rh401 rhel5.2
Rh401 rhel5.2
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e Além
 
Aula20 open vpn
Aula20 open vpnAula20 open vpn
Aula20 open vpn
 
Aula14 vsftp de-introopenldap
Aula14 vsftp de-introopenldapAula14 vsftp de-introopenldap
Aula14 vsftp de-introopenldap
 
Alta performance de Aplicações Web
Alta performance de Aplicações WebAlta performance de Aplicações Web
Alta performance de Aplicações Web
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on rails
 
Autenticação Centralizada
Autenticação CentralizadaAutenticação Centralizada
Autenticação Centralizada
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
Hardening linux
Hardening linuxHardening linux
Hardening linux
 
Rh442 rhel6.2
Rh442 rhel6.2Rh442 rhel6.2
Rh442 rhel6.2
 
Web seminario hardening
Web seminario hardeningWeb seminario hardening
Web seminario hardening
 
Rh436 rhel6.2
Rh436 rhel6.2Rh436 rhel6.2
Rh436 rhel6.2
 
Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13Escalabilidade em Aplicações - Fisl13
Escalabilidade em Aplicações - Fisl13
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuning
 

Similar to Entregando imagens na internet

IIS para desenvolvedores
IIS para desenvolvedoresIIS para desenvolvedores
IIS para desenvolvedoresCleber Dantas
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureFabrício Lopes Sanchez
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Rodolfo Fadino Junior
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance RailsVitor Pellegrino
 
Dnad 2012 iis - uma questão de arquitetura
Dnad 2012   iis - uma questão de arquiteturaDnad 2012   iis - uma questão de arquitetura
Dnad 2012 iis - uma questão de arquiteturaSidney Filho
 
IIS - Uma questão de arquitetura
IIS - Uma questão de arquiteturaIIS - Uma questão de arquitetura
IIS - Uma questão de arquiteturasidneyfilho
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produçãothomasdacosta
 
Introdução ao Windows Server 2012
Introdução ao Windows Server 2012Introdução ao Windows Server 2012
Introdução ao Windows Server 2012Danilo Augusto Leite
 
Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web MobileBruno Carreira
 
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...CPqD
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
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
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialFernando Hamasaki de Amorim
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensPaulino Michelazzo
 

Similar to Entregando imagens na internet (20)

IIS para desenvolvedores
IIS para desenvolvedoresIIS para desenvolvedores
IIS para desenvolvedores
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
 
Performance Codificando Night Week 2016
Performance Codificando Night Week 2016Performance Codificando Night Week 2016
Performance Codificando Night Week 2016
 
Performance Web com ASP.NET MVC
Performance Web com ASP.NET MVCPerformance Web com ASP.NET MVC
Performance Web com ASP.NET MVC
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 
Dnad 2012 iis - uma questão de arquitetura
Dnad 2012   iis - uma questão de arquiteturaDnad 2012   iis - uma questão de arquitetura
Dnad 2012 iis - uma questão de arquitetura
 
IIS - Uma questão de arquitetura
IIS - Uma questão de arquiteturaIIS - Uma questão de arquitetura
IIS - Uma questão de arquitetura
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Introdução ao Windows Server 2012
Introdução ao Windows Server 2012Introdução ao Windows Server 2012
Introdução ao Windows Server 2012
 
Sapo Sessions - Web Mobile
Sapo Sessions - Web MobileSapo Sessions - Web Mobile
Sapo Sessions - Web Mobile
 
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
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)
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercial
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 

Entregando imagens na internet

  • 2. Agenda • Problemas • Objetivo • Escopo • Arquitetura • Desafios em Produção • Solução • Próximos Passos • Resultados • Um pouco mais sobre o Varnish • Perguntas • Referências
  • 3. Problemas • Muitos servidores (16+27) • Percepção na demora no carregamento das imagens • Muita leitura em disco • Muita dependência de NFS
  • 4. Objetivo • Aumentar a disponibilidade e otimizar a entrega das imagens do Portal • Diminuir acessos de leitura ao disco • Simplificar a infraestrutura de imagens • Desafio -> diminuir de 27 máquinas para 8 ($$$)
  • 5. Escopo • Mostrar a solução adotada comparando os dois cenários (antes e depois) • Resultados obtidos • Breve workshop sobre o Varnish
  • 6. Do que falamos? • Quantidade de imagens servidas por dia • ~ 4.512.904.784 • Imagens únicas: ~ 784.215 • Tráfego estimado por dia • ~ 59.2GB • Requisições por segundo • ~ 80k
  • 10. Comparativo: Varnish x Nginx • Por que o varnish? • Por que não continuar com o nginx? Varnish Nginx Hits per second (k) 16 15 Longest Transaction (sec) 0,05 3,12 CPU (%) 1,3 0,6 Load Avg 0,01 0,22 0 2 4 6 8 10 12 14 16 18 Carga Máxima
  • 11. Comparativo: Varnish x Nginx Varnish Nginx Hits per second (k) 3 3 Longest Transaction (sec) 0,01 0,12 CPU (%) 0,9 0,4 Load Avg 0,01 0,13 0 0,5 1 1,5 2 2,5 3 3,5 Cenário de Produção
  • 12. Desafios Superados em Produção Sim, tivemos problemas!!
  • 13. Desafios Superados em Produção • Varnish: Não interpreta os url code Ex. – Hífen(“-”) → (%20) – Interrogação(“?”) → (%3F) – Solução foi aplicar o vmod URLCode diponibilizado pelo varnish-cache.org
  • 14. Desafios Superados em Produção • Varnish: Reiniciava o processo filho – All worker threads can block on the vcl_pipe under high load – Solução foi aplicar o patch 0010-varnishd- optimize-epoll-thread.patch
  • 15. Desafios Superados em Produção • Imagens invertidas – Com o Keep-Alive ativado, é ativo o pipelining que causava a inversão de algumas imagens no Safari do iPad e iPhone – Solução foi fazer um tratamento para o User-Agent do iPad e iPhone
  • 16. Desafios Superados em Produção • Falha excessiva de timeout (408) e load da máquina alto – Tempo de entrega superior a 30 segundos – Solução foi realizar espalhamento das imagens limitando seu número dentro de um único diretório e aplicar o vmod digest para a tradução da url.
  • 17. Desafios Superados em Produção • Exemplo http://n.i.uol.com.br/ultnot/album/111007afeganistao_f_040.jpg http://n.i.uol.com.br/_md5/a/c0/ce64ea3f9353730f5b100b74f0261.jpg
  • 18. Desafios Superados em Produção Total ~ 8.203.459 ~ 72 hrs +250GB Quantidade Domínio 1.825.441 w3.i.uol.com.br 1.652.733 n.i.uol.com.br 1.251.104 e.i.uol.com.br 1.243.172 j.i.uol.com.br 841.429 tv.i.uol.com.br 613.705 es.i.uol.com.br 294.164 d.i.uol.com.br 226.604 ci.i.uol.com.br 187.547 ce.imguol.com
  • 19. Desafios Superados em Produção E agora, foi sucesso???
  • 20. Desafios Superados em Produção NÃO
  • 21. Desafios Superados em Produção • Falha excessiva de timeout (408) e load da máquina alto – Tempo de entrega superior a 30 segundos – Solução foi realizar um upgrade no kernel – de 2.6.32-71 para 2.6.32-358.2.1
  • 22. Desafios Superados em Produção INFO: task httpd:30126 blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. httpd D ffffffffffffffff 0 30126 26948 0x00000080 ffff8803bf9b7bb8 0000000000000082 ffff8803bf9b7b28 ffffffff81184b6a ffff8801aade6780 ffff8801adf36ec0 ffff8803bf9b7b98 ffffffffa0240f97 ffff8803c6fffb18 ffff8803bf9b7fd8 0000000000010518 ffff8803c6fffb18 Call Trace: [<ffffffff81184b6a>] ? dput+0x9a/0x150 [<ffffffffa0240f97>] ? nfs_lookup_revalidate+0x207/0x5e0 [nfs] [<ffffffff814c97ae>] __mutex_lock_slowpath+0x13e/0x180 [<ffffffffa023f011>] ? nfs_do_access+0x141/0x420 [nfs] [<ffffffff814c964b>] mutex_lock+0x2b/0x50 [<ffffffff8117a4d3>] do_lookup+0xd3/0x220 [<ffffffff8117b145>] __link_path_walk+0x6f5/0x1040 [<ffffffff8117bd1a>] path_walk+0x6a/0xe0 [<ffffffff8117beeb>] do_path_lookup+0x5b/0xa0 [<ffffffff8117cb57>] user_path_at+0x57/0xa0 [<ffffffff81091ca0>] ? autoremove_wake_function+0x0/0x40 [<ffffffff81171d3c>] vfs_fstatat+0x3c/0x80 [<ffffffff81171eab>] vfs_stat+0x1b/0x20 [<ffffffff81171ed4>] sys_newstat+0x24/0x50 [<ffffffff810d40a2>] ? audit_syscall_entry+0x272/0x2a0 [<ffffffff81013172>] system_call_fastpath+0x16/0x1b INFO: task httpd:30126 blocked for more than 120 seconds.
  • 24. A solução Opção pelo uso do Varnish e desenvolvimento de ferramenta para otimização de imagens - imagine
  • 26. Varnish • Open Source • Acelerador HTTP • Servidor de proxy reverso • Balanceador de carga • 64bit, muito rápido • Comportamento programável • Não aceita ssl!!!
  • 27. Por que não SSL? 0 50.000 100.000 150.000 200.000 250.000 300.000 350.000 400.000 OpenSSL Varnish Nº linhas • Quantidade de linhas • Código complexo, com comentários duvidosos
  • 28. O que fazer com ssl ? Varnish
  • 29. Varnish • Quantidade requisições http 4.512.904.784/dia • Quantidade requisições https 24.565.952/dia 99,09% 0,91% 0,00% 20,00% 40,00% 60,00% 80,00% 100,00% 120,00% http https Requisições por dia
  • 31. Imagine • O que é? - Servlet (Java 7) desenvolvida por ROd e Leonardo Nickel (Time de CMS) - Libs utilizadas - optipng - GraphicsMagic - WebP - jpegtran
  • 32. Imagine • Como funciona o Imagine? - Remove exif (metainformações) - Otimiza a paleta de cores • WebP - PNG: 26% menor - JPEG/JPG: 25-34% menor
  • 35. Próximos Passos  Aumentar o cache do Varnish o Aumentar o tempo do objeto em cache o Fazer o Varnish ir buscar o objeto requisitado no Varnish vizinho, caso não tenha no cache o Migrar os domínios de.i.uol.com.br, simguol.com e ads.imguol.com  Aplicar o patch de correção de load para as demais máquinas
  • 36. Resultados • Carregamento das páginas mais rápidas • Melhora na experiência do usuário • Cache mais eficiente, minimizando o acesso ao backend • Menor tráfego de banda
  • 37. Um pouco mais sobre Varnish
  • 39. Varnish • Varnishd – VCL (Varnish Configuration Language) – Cache do varnish pode utilizar até o dobro da memória mencionada
  • 41. Varnish • Varnishncsa – NCSA combined log format Client_IP_address -User_Name [Date:Time -TimeZone] "Method Object HTTP_version" HTTP_StatusCode BytesSent
  • 44. Referências • http://www.varnish-cache.org • https://www.varnish-cache.org/docs/trunk/phk/ssl.html • http://www.youtube.com/watch?feature=player_embedded&v=eAbamezUOjs • https://www.varnish-cache.org/docs/3.0/reference/varnishd.html • https://www.varnish-cache.org/trac/ticket/1285 • https://developers.google.com/speed/webp/ • https://developers.google.com/speed/docs/best-practices/payload • https://www.varnish-cache.org/docs/3.0/tutorial/sizing_your_cache.html
  • 45. Fim Obrigado Caio Tedim Francisco – cfrancisco@uoldiveo.com