Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
HTTP Cache + VarnishWeb sites performance optimization
@desarrolla2               Desarrollador                 PHP desde               septiembre de                   2007     ...
¿Por qué?GWT: Asegura que mi sitio es lentoOn average, pages in your site take 2.2 seconds to load (updated on Mar21, 2012...
HTTP CacheWeb sites performance optimization
¿Por qué?"Es (posiblemente) elsistema de cache quemás eficaz y fácil de    implementar."        - Daniel González
Objetivo "Nunca generar lamisma respuesta dos     veces."             - Alguien
HTTP Cache  "Es un protocolo de cache que debería ser respetado por todas las capas intermedias y            por los naveg...
HTTP Cache: Freshness    "En la mayoría de   los casos es la mejor   estrategia de cache."
HTTP Cache: FreshnessCache-Control  Public, Private  No-Cache, No-store  max-age, s-maxage  must-revalidate  // ..      Ca...
HTTP Cache: FreshnessPragma    Pragma: Private, max-age:3600
HTTP Cache: Freshness$response->setMaxAge(15 * 60); $response->setExpires(new DateTime(now + 15 minutes));// ..
HTTP Cache: Freshnessheader("Cache-Control:...");header("Pragma:...");// ..
HTTP Cache: Freshness<meta http-equiv="Cache-Control" content="max-age=3600, private">
HTTP Cache: Freshness<filesMatch ".(js|css)$">    Header set Cache-Control "private, max-age=7200"</filesMatch>
HTTP Cache: Validation     "Cuando no puedes    predecir la frecuencia   con la que cambian tus          recursos."
HTTP Cache: ValidationLast-Modified  Last-Modified: Tue, 15 Nov 1994 12:45:26 GMTEtag  ETag: "3e86-410-3596fbbc"
HTTP Cache: Validation$response->setLastModified(new DateTime(2000-01-01));$response->setEtag(md5($response->getContent())...
HTTP Cache: Validation<filesMatch ".(gif|jpg|jpeg|png|mpg|avi)$">    Header set Last-modified "Mon, 03 Jan 2011 13:02:54GM...
HTTP CacheHTTP/1.1 200 OKDate: Fri, 30 Oct 1998 13:19:41 GMTCache-Control: public, s-maxage=3600Expires: Fri, 30 Oct 1998 ...
HTTP Cache: Friendly URLshttp://misite.com/es/home-user/welcome/http://misite.com/welcome.php/?country=es&usertype=home-user
ESI      <esi:include src="      http://misite.      com/header.php" />      ● include_partial()      ● {% render %}      ...
ESI
Estandar no es claro   Puede ser ignoradoUna cache en cada cliente   Invalidar la cache
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
VarnishHTTP Accelerator
¿Por que?   "Varnish is a web       applicationaccelerator. You installit in front of your webapplication and it will     ...
¿Por que?"Rápido, Flexible y   Escalable"
Varnish: http cache
¿Que es?           Reverse Proxy           Proxy Cache
¿Que es?           Fail Over System            Load Balancer
Caracteristicas       Obedece cabeceras HTTP Cache         Cache de recursos estáticos    Modifica las cabeceras y las coo...
¿Quien?
¿Cómo?
Instalaciónsudo apt-get install varnishsudo vim /etc/varnish/default.vcl   backend default {       .host = "127.0.0.1";   ...
Instalaciónsudo vim /etc/default/varnishSTART=yes //DAEMON_OPTS="-a :8080  // puerto      -T localhost:6082       -f /etc/...
Varnish: assets<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">    Header set Cache-Control "max-age=2592000"</FilesMatch><...
Varnish Configuration LanguageSubroutines    vcl_recv / vcl_fetch / vcl_deliver / vcl_hash / vcl_miss/ vcl_hit / vcl_error...
Varnish: cookiessub vcl_recv {   if (req.request == "GET" && req.url ~ ".(jpg|jpeg|gif|png)$") {         unset req.http.Co...
Varnish: Headerssub vcl_fetch {    if (!beresp.cacheable) {    return (pass);    }    set beresp.http.Server = "SFM Server...
Varnish: Headerssub vcl_deliver {    if (obj.hits > 0) {         set resp.http.X-Cache = "HIT " obj.hits;    } else {     ...
Varnish: invalidar la cachéacl purge{    "localhost";     "192.168.55.0"/24;}if (req.request == "PURGE") {      if (!clien...
Varnish: invalidar la cachésub vcl_hit {  if (req.request == "PURGE") {     set obj.ttl = 0s;     error 200 "Purged";  }}s...
Varnish vs Memcached                       En el                       momento en                       el que el         ...
Symfony2 Reverse Proxy
Varnish: invalidar la caché<?phprequire_once __DIR__./../app/bootstrap.php.cache;require_once __DIR__./../app/AppKernel.ph...
Conclusiónes   "con HTTP Cache + Varnish el  rendimiento de tu sitio mejorará          notablemente"
Conclusiónes "HTTP Cache + Varnish por si solo  son insuficiente, necesitas utilizarotras técnicas, como carga asincrona  ...
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Varnish http cache
Upcoming SlideShare
Loading in …5
×

Varnish http cache

4,817 views

Published on

Published in: Technology
  • Be the first to comment

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..."

×