Varnish http cache

4,747 views
4,544 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,747
On SlideShare
0
From Embeds
0
Number of Embeds
83
Actions
Shares
0
Downloads
44
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Varnish http cache

  1. 1. HTTP Cache + VarnishWeb sites performance optimization
  2. 2. @desarrolla2 Desarrollador PHP desde septiembre de 2007 Buscando curro!!!
  3. 3. ¿Por qué?GWT: Asegura que mi sitio es lentoOn average, pages in your site take 2.2 seconds to load (updated on Mar21, 2012). This is faster than 63% of sites.
  4. 4. HTTP CacheWeb sites performance optimization
  5. 5. ¿Por qué?"Es (posiblemente) elsistema de cache quemás eficaz y fácil de implementar." - Daniel González
  6. 6. Objetivo "Nunca generar lamisma respuesta dos veces." - Alguien
  7. 7. HTTP Cache "Es un protocolo de cache que debería ser respetado por todas las capas intermedias y por los navegadores."
  8. 8. HTTP Cache: Freshness "En la mayoría de los casos es la mejor estrategia de cache."
  9. 9. HTTP Cache: FreshnessCache-Control Public, Private No-Cache, No-store max-age, s-maxage must-revalidate // .. Cache-Control: Public, s-maxage:3600, must- revalidateExpires Expires Tue, 20 Mar 2012 11:21:13 GMT
  10. 10. HTTP Cache: FreshnessPragma Pragma: Private, max-age:3600
  11. 11. HTTP Cache: Freshness$response->setMaxAge(15 * 60); $response->setExpires(new DateTime(now + 15 minutes));// ..
  12. 12. HTTP Cache: Freshnessheader("Cache-Control:...");header("Pragma:...");// ..
  13. 13. HTTP Cache: Freshness<meta http-equiv="Cache-Control" content="max-age=3600, private">
  14. 14. HTTP Cache: Freshness<filesMatch ".(js|css)$"> Header set Cache-Control "private, max-age=7200"</filesMatch>
  15. 15. HTTP Cache: Validation "Cuando no puedes predecir la frecuencia con la que cambian tus recursos."
  16. 16. HTTP Cache: ValidationLast-Modified Last-Modified: Tue, 15 Nov 1994 12:45:26 GMTEtag ETag: "3e86-410-3596fbbc"
  17. 17. HTTP Cache: Validation$response->setLastModified(new DateTime(2000-01-01));$response->setEtag(md5($response->getContent()));// ..$response->setCache(array());
  18. 18. HTTP Cache: Validation<filesMatch ".(gif|jpg|jpeg|png|mpg|avi)$"> Header set Last-modified "Mon, 03 Jan 2011 13:02:54GMT"</filesMatch>
  19. 19. HTTP CacheHTTP/1.1 200 OKDate: Fri, 30 Oct 1998 13:19:41 GMTCache-Control: public, s-maxage=3600Expires: Fri, 30 Oct 1998 14:19:41 GMTLast-Modified: Mon, 29 Jun 1998 02:28:12 GMTETag: "3e86-410-3596fbbc"// ..
  20. 20. HTTP Cache: Friendly URLshttp://misite.com/es/home-user/welcome/http://misite.com/welcome.php/?country=es&usertype=home-user
  21. 21. ESI <esi:include src=" http://misite. com/header.php" /> ● include_partial() ● {% render %} http://www.w3. org/TR/esi-lang
  22. 22. ESI
  23. 23. Estandar no es claro Puede ser ignoradoUna cache en cada cliente Invalidar la cache
  24. 24. http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
  25. 25. VarnishHTTP Accelerator
  26. 26. ¿Por que? "Varnish is a web applicationaccelerator. You installit in front of your webapplication and it will speed it up significantly."
  27. 27. ¿Por que?"Rápido, Flexible y Escalable"
  28. 28. Varnish: http cache
  29. 29. ¿Que es? Reverse Proxy Proxy Cache
  30. 30. ¿Que es? Fail Over System Load Balancer
  31. 31. Caracteristicas Obedece cabeceras HTTP Cache Cache de recursos estáticos Modifica las cabeceras y las cookies de peticiones y respuestas
  32. 32. ¿Quien?
  33. 33. ¿Cómo?
  34. 34. Instalaciónsudo apt-get install varnishsudo vim /etc/varnish/default.vcl backend default { .host = "127.0.0.1"; .port = "8080"; }sudo vim /etc/apache2/ports.confListen 8080
  35. 35. Instalaciónsudo vim /etc/default/varnishSTART=yes //DAEMON_OPTS="-a :8080 // puerto -T localhost:6082 -f /etc/varnish/default.vcl // vlc script -S /etc/varnish/secret //cli autentication -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"//storage, malloc mantendría los objetos en memoria https://www.varnish-cache.org/docs/2. 1/installation/install.html
  36. 36. Varnish: assets<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$"> Header set Cache-Control "max-age=2592000"</FilesMatch><FilesMatch ".(css|js)$"> Header set Cache-Control "max-age=604800"</FilesMatch>$ ab -n 2000 -c 100 http://sfm.desarrolla2.com/bundles/sfmwebsite/images/titulo-symfony-madrid.png
  37. 37. Varnish Configuration LanguageSubroutines vcl_recv / vcl_fetch / vcl_deliver / vcl_hash / vcl_miss/ vcl_hit / vcl_error / ...Actions pass / lookup / pipe / deliverObjects req / beresp / obj
  38. 38. Varnish: cookiessub vcl_recv { if (req.request == "GET" && req.url ~ ".(jpg|jpeg|gif|png)$") { unset req.http.Cookie; return(lookup); }}sub vcl_fetch { if (req.url ~ ".(jpg|jpeg|gif|png)$") { unset beresp.http.set-cookie; }}
  39. 39. Varnish: Headerssub vcl_fetch { if (!beresp.cacheable) { return (pass); } set beresp.http.Server = "SFM Server 1.0" ; return (deliver);}
  40. 40. Varnish: Headerssub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT " obj.hits; } else { set resp.http.X-Cache = "MISS"; } return (deliver)}$ curl - I http://sfm.desarrolla2.com/bundles/sfmwebsite/images/titulo-symfony-madrid.png
  41. 41. Varnish: invalidar la cachéacl purge{ "localhost"; "192.168.55.0"/24;}if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; }}
  42. 42. Varnish: invalidar la cachésub vcl_hit { if (req.request == "PURGE") { set obj.ttl = 0s; error 200 "Purged"; }}sub vcl_miss { if (req.request == "PURGE") { error 404 "Not purged"; }}
  43. 43. Varnish vs Memcached En el momento en el que el recurso ha caducado. publico.es
  44. 44. Symfony2 Reverse Proxy
  45. 45. Varnish: invalidar la caché<?phprequire_once __DIR__./../app/bootstrap.php.cache;require_once __DIR__./../app/AppKernel.php;//require_once __DIR__./../app/AppCache.php;use SymfonyComponentHttpFoundationRequest;$kernel = new AppKernel(prod, false);$kernel->loadClassCache();//$kernel = new AppCache($kernel);$kernel->handle(Request::createFromGlobals())->send();
  46. 46. Conclusiónes "con HTTP Cache + Varnish el rendimiento de tu sitio mejorará notablemente"
  47. 47. Conclusiónes "HTTP Cache + Varnish por si solo son insuficiente, necesitas utilizarotras técnicas, como carga asincrona de recursos, minimización, ect..."

×