Your SlideShare is downloading. ×
Varnish qconsp 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Varnish qconsp 2011

1,385
views

Published on

Varnish não é a solução a menos que você tenha a arquitetura, o sistema operacional e os headers HTTP em plena harmonia. Nesta apresentação detalharemos como os headers de caching do protocolo HTTP …

Varnish não é a solução a menos que você tenha a arquitetura, o sistema operacional e os headers HTTP em plena harmonia. Nesta apresentação detalharemos como os headers de caching do protocolo HTTP funcionam e como podemos utilizá-los da melhor forma possível. Além dos novos recursos e funcionalidades da versão 3 do Varnish, será abordado como otimizar webservers e algumas regras de aplicações web no sentido de ter uma melhor eficiência de infraestrutura de seu datacenter, visando economia de hardware, recursos de rede e maior performance no carregamento de páginas web.

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,385
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Varnish
  • 2. Sumário
    • Caching em HTTP
    • 3. Varnish Workshop
  • 4. Caching em HTTP Como funciona um “Acelerador Web” (Reverse Proxy Cache)
    • Expiração (headers Cache-Control, Age e Expires)
    • 5. Validação (headers Last-Modified, Etag, If-Modified-Since, If-None-Modified)
    • 6. Browser -> Cache -> Backend
  • 7. Expiração por tempo
  • 8.  
  • 9.  
  • 10. Validação por controle
  • 11.  
  • 12.  
  • 13. Combinando Expiração e Validação
  • 14.  
  • 15.  
  • 16.  
  • 17. Varnish workshop
    • Elementos do vcl
    • 18. Fluxo e objetos
    • 19. Hash
    • 20. Métodos HTTP
    • 21. Misc: set/unset, regexp, ttl, headers de diagnóstico
    • 22. Persistência: como funciona o grace
    • 23. Ferramentas auxiliares: varnishlog, varnishncsa, varnishadm
    • 24. Purge/Ban
  • 25. Elementos do vcl Os elementos básicos do vcl são: Backend
      • Aqui são especificados os parâmetros de comunicação com o backend e probe (healthcheck) – semelhante à um VIP
    Subrotinas e módulos
      • Subrotinas não retornam valores
      • 26. Além das rotinas pré-definidas (que determinam o fluxo do Varnish) podem ser criadas subrotinas customizadas
      • 27. Módulo pode retornar a localização geográfica de um endereço IP ou usar o varnish como um cliente HTTP e buscar cabeçalhos e corpo nos backends
    Acls Includes Inline C
  • 28. backend backend ig { .host = "vip.be.infra"; .probe = { .url = "/healthcheck.html"; .timeout = 34 ms; .interval = 1s; .window = 10; .threshold = 8; } } director baz round-robin { { .backend = ig; } { .backend = com; } }
  • 29. acl acl purge { "localhost"; "127.0.0.1"; "10.0.0.0"/8; } acl header { "localhost"; "200.200.100.100"; "10.0.0.0"/8; }
  • 30. Include e sub include ”/etc/varnish/functions.inc"; --- sub normalize_user_agent { if(req.http.User-Agent ~ "iPhone|Android") { set req.http.User-Agent = "mobile"; } else { remove req.http.user-agent; } }
  • 31. Varnish: Fluxo e Objetos
  • 32.  
  • 33. Hash sub vcl_hash { if (req.http.user-agent ~ "mobile") { hash_data(req.http.user-agent); } # Vital para virtualhosts hash_data(req.url); hash_data(req.http.host); return (hash); }
  • 34. Métodos HTTP if (req.request ~ "(GET|HEAD)") { return(lookup); } # Se for um POST deixa passar sem fazer cache elsif (req.request == "POST") { return(pass); } ...cont
  • 35. Métodos HTTP elsif (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "opt Cache: Purge Not allowed."; } ban_url(req.url); error 200 req.url; } else { error 403 "opt Cache: Request not allowed."; }
  • 36. Misc (call, set, regexp) call normalize_accept_encoding; --- sub normalize_accept_encoding { if (req.http.Accept-Encoding) { if (req.http.User-Agent ~ "MSIE 6") { remove req.http.Accept-Encoding; } elsif (req.http.Accept-Encoding ~ "gzip") { set req.http.Accept-Encoding = "gzip"; } elsif (req.http.Accept-Encoding ~ "deflate") { set req.http.Accept-Encoding = "deflate"; } else { remove req.http.Accept-Encoding; } } }
  • 37. Misc (ttl, beresp) # se nao for 200, 301, 302 ou 304 = ttl de 5s if (beresp.status != 200 && beresp.status != 301 && beresp.status != 302 && beresp.status != 304) { set beresp.ttl = 5s; } # ttl minimo de 60s para os objetos com retorno 200, 301, 302 e 304 else { if (beresp.ttl < 60s) { set beresp.ttl = 60s; } }
  • 38. Persistência Persistência O grace mode permite ao varnish responder lookups mesmo quando um objeto expirou seu ttl enquanto o backend não estiver up ou lento Configuração necessária Em vcl_recv:
      • set req.grace = 3d;
    Em vcl_fetch:
      • set req.grace = 3d;
    Importante: É necessário ter o probe na configuração de backend para que o grace funcione.
  • 39. Ferramentas Auxiliares
    • varnishadm
    • 40. varnishlog com suporte a filtros de registros que correspondem múltiplas expressões
    • 41. varnishstat
    • 42. varnishtop
    • 43. varnishncsa com suporte de log com formatos personalizados
  • 44. varnishadm # varnishadm -T localhost:6082 &quot;ban req.url ~ /index.html && req.http.host == site.com.br&quot; CLI connected to localhost:6082 # varnishadm -T localhost:6082 &quot;vcl.list&quot; CLI connected to localhost:6082 available 887 boot available 7 1312244228_site.com.br active 382 1312261977_ajuste_site.com.br
  • 45. varnishlog $ varnishlog -o -i TxURL,TxHeader 102 TxHeader c Date: Sun, 11 Sep 2011 14:44:26 GMT 102 TxHeader c Last-Modified: Mon, 07 Feb 2011 20:40:38 GMT 102 TxHeader c Cache-Control: max-age=60 102 TxHeader c Expires: Sun, 11 Sep 2011 14:44:31 GMT 102 TxHeader c Vary: Accept-Encoding 102 TxHeader c Connection: keep-alive 102 TxHeader c X-Cache: HIT $ varnishlog -i TxURL,TxHeader -I '(TxURL|Host:)' 47 TxHeader - Host: www.sitea.com.br 47 TxHeader - Host: www.siteb.com.br 47 TxHeader - Host: vhost.sitea.com.br
  • 46. varnishstat $ varnishstat 123+18:16:25 Hitrate ratio: 10 44 48 Hitrate avg: 0.9750 0.09705 0.09718 client_conn 45687252 4.27 Client connections accepted client_drop 0 0.00 Connection dropped, no sess/wrk client_req 541868273 50.69 Client requests received cache_hit 522400064 48.87 Cache hits cache_hitpass 0 0.00 Cache hits for pass cache_miss 14239594 1.33 Cache misses backend_conn 2933231 0.27 Backend conn. success backend_unhealthy 753 0.00 Backend conn. not attempted backend_busy 0 0.00 Backend conn. too many backend_fail 0 0.00 Backend conn. failures backend_reuse 12523383 1.17 Backend conn. reuses backend_toolate 2387757 0.22 Backend conn. was closed backend_recycle 14911184 1.40 Backend conn. recycles backend_unused 0 0.00 Backend conn. unused
  • 47. varnishtop $ varnishtop -i RxHeader -C -I ^User-Agent -1 1240.00 RxHeader User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1 765.00 RxHeader User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
  • 48. Configuração dos Headers #Apache Header unset ETag ExpiresActive On ExpiresByType text/css &quot;now plus 10 years&quot; ExpiresByType text/html &quot;now plus 60 seconds&quot; ExpiresByType image/gif &quot;now plus 10 years&quot; ExpiresByType image/png &quot;now plus 10 years&quot; ExpiresByType image/jpeg &quot;now plus 10 years&quot; ExpiresByType application/javascript &quot;now plus 10 years&quot; ExpiresByType application/x-shockwave-flash &quot;now plus 10 years&quot; Header append Cache-Control public env=static-content
  • 49. Obrigado! Dúvidas ? iG – Internet Group Flavio Torres [email_address] @flavio_torres