Successfully reported this slideshow.
Varnish
Sumário <ul><li>Caching em HTTP
Varnish Workshop </li></ul>
Caching em HTTP Como funciona um “Acelerador Web” (Reverse Proxy Cache) <ul><li>Expiração (headers Cache-Control, Age e Ex...
Validação (headers Last-Modified, Etag, If-Modified-Since, If-None-Modified)
Browser -> Cache -> Backend </li></ul>
Expiração por tempo
 
 
Validação por controle
 
 
Combinando Expiração e Validação
 
 
 
Varnish workshop <ul><li>Elementos do vcl
Fluxo e objetos
Hash
Métodos HTTP
Misc: set/unset, regexp, ttl, headers de diagnóstico
Persistência: como funciona o grace
Ferramentas auxiliares: varnishlog, varnishncsa, varnishadm
Purge/Ban </li></ul>
Elementos do vcl Os elementos básicos do vcl são: Backend <ul><ul><li>Aqui são especificados os parâmetros de comunicação ...
Além das rotinas pré-definidas (que determinam o fluxo do Varnish) podem ser criadas subrotinas customizadas
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...
backend backend ig { .host = &quot;vip.be.infra&quot;;   .probe = {   .url = &quot;/healthcheck.html&quot;;   .timeout = 3...
acl acl purge { &quot;localhost&quot;; &quot;127.0.0.1&quot;; &quot;10.0.0.0&quot;/8; } acl header { &quot;localhost&quot;...
Include e sub include ”/etc/varnish/functions.inc&quot;; --- sub normalize_user_agent { if(req.http.User-Agent ~ &quot;iPh...
Varnish: Fluxo e Objetos
 
Hash sub vcl_hash { if (req.http.user-agent ~ &quot;mobile&quot;) {   hash_data(req.http.user-agent); } # Vital para virtu...
Upcoming SlideShare
Loading in …5
×

Varnish qconsp 2011

1,580 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 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
  • Be the first to comment

Varnish qconsp 2011

  1. 1. Varnish
  2. 2. Sumário <ul><li>Caching em HTTP
  3. 3. Varnish Workshop </li></ul>
  4. 4. Caching em HTTP Como funciona um “Acelerador Web” (Reverse Proxy Cache) <ul><li>Expiração (headers Cache-Control, Age e Expires)
  5. 5. Validação (headers Last-Modified, Etag, If-Modified-Since, If-None-Modified)
  6. 6. Browser -> Cache -> Backend </li></ul>
  7. 7. Expiração por tempo
  8. 10. Validação por controle
  9. 13. Combinando Expiração e Validação
  10. 17. Varnish workshop <ul><li>Elementos do vcl
  11. 18. Fluxo e objetos
  12. 19. Hash
  13. 20. Métodos HTTP
  14. 21. Misc: set/unset, regexp, ttl, headers de diagnóstico
  15. 22. Persistência: como funciona o grace
  16. 23. Ferramentas auxiliares: varnishlog, varnishncsa, varnishadm
  17. 24. Purge/Ban </li></ul>
  18. 25. Elementos do vcl Os elementos básicos do vcl são: Backend <ul><ul><li>Aqui são especificados os parâmetros de comunicação com o backend e probe (healthcheck) – semelhante à um VIP </li></ul></ul>Subrotinas e módulos <ul><ul><li>Subrotinas não retornam valores
  19. 26. Além das rotinas pré-definidas (que determinam o fluxo do Varnish) podem ser criadas subrotinas customizadas
  20. 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 </li></ul></ul>Acls Includes Inline C
  21. 28. backend backend ig { .host = &quot;vip.be.infra&quot;; .probe = { .url = &quot;/healthcheck.html&quot;; .timeout = 34 ms; .interval = 1s; .window = 10; .threshold = 8; } } director baz round-robin { { .backend = ig; } { .backend = com; } }
  22. 29. acl acl purge { &quot;localhost&quot;; &quot;127.0.0.1&quot;; &quot;10.0.0.0&quot;/8; } acl header { &quot;localhost&quot;; &quot;200.200.100.100&quot;; &quot;10.0.0.0&quot;/8; }
  23. 30. Include e sub include ”/etc/varnish/functions.inc&quot;; --- sub normalize_user_agent { if(req.http.User-Agent ~ &quot;iPhone|Android&quot;) { set req.http.User-Agent = &quot;mobile&quot;; } else { remove req.http.user-agent; } }
  24. 31. Varnish: Fluxo e Objetos
  25. 33. Hash sub vcl_hash { if (req.http.user-agent ~ &quot;mobile&quot;) { hash_data(req.http.user-agent); } # Vital para virtualhosts hash_data(req.url); hash_data(req.http.host); return (hash); }
  26. 34. Métodos HTTP if (req.request ~ &quot;(GET|HEAD)&quot;) { return(lookup); } # Se for um POST deixa passar sem fazer cache elsif (req.request == &quot;POST&quot;) { return(pass); } ...cont
  27. 35. Métodos HTTP elsif (req.request == &quot;PURGE&quot;) { if (!client.ip ~ purge) { error 405 &quot;opt Cache: Purge Not allowed.&quot;; } ban_url(req.url); error 200 req.url; } else { error 403 &quot;opt Cache: Request not allowed.&quot;; }
  28. 36. Misc (call, set, regexp) call normalize_accept_encoding; --- sub normalize_accept_encoding { if (req.http.Accept-Encoding) { if (req.http.User-Agent ~ &quot;MSIE 6&quot;) { remove req.http.Accept-Encoding; } elsif (req.http.Accept-Encoding ~ &quot;gzip&quot;) { set req.http.Accept-Encoding = &quot;gzip&quot;; } elsif (req.http.Accept-Encoding ~ &quot;deflate&quot;) { set req.http.Accept-Encoding = &quot;deflate&quot;; } else { remove req.http.Accept-Encoding; } } }
  29. 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; } }
  30. 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: <ul><ul><li>set req.grace = 3d; </li></ul></ul>Em vcl_fetch: <ul><ul><li>set req.grace = 3d; </li></ul></ul>Importante: É necessário ter o probe na configuração de backend para que o grace funcione.
  31. 39. Ferramentas Auxiliares <ul><li>varnishadm
  32. 40. varnishlog com suporte a filtros de registros que correspondem múltiplas expressões
  33. 41. varnishstat
  34. 42. varnishtop
  35. 43. varnishncsa com suporte de log com formatos personalizados </li></ul>
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 49. Obrigado! Dúvidas ? iG – Internet Group Flavio Torres [email_address] @flavio_torres

×