Configurar Varnish 3 per al us amb ESI

Una de les millores que mes m’han agradat de l’ultima versió de Varnish a sigut la implementació del llenguatge ESI i, tot i que la versió anterior ja portava certa compatibilitat amb ESI, aquesta no acabava de funcionar molt be.

Diagrama de escorcoll amb ESIPer a qui no sàpiga de que parlo, ESI es un llenguatge de marcatge que permet marcar parts d’una plana web per ser escorcollat de manera independent de la resta de la plana web. Imagineu-vos que teniu en la vostra pagina principal de la vostra web una part que es 100% estàtica (logos, menús,…) i un altre part que es mes dinàmica (una columna de noticies per exemple). Els sistemes tradicionals fins ara, nomes permetien escorcollar una plana web sencera per lo que si volíeu actualitzar la columna de noticies, teníeu que indicar-li al vostre sistema de escorcoll que actualitzara tota la plana web sencera (inclús les parts que no s’han modificat). Amb ESI, pots indicar al teu sistema que nomes actualitzi una part de la plana web (en aquest cas la columna de noticies) per lo qual, la resta de la web no s’actualitzaria estalviant-nos el cost de memoria, cpu i trafic que tot aixo comporta.

Encara estic fent proves amb aquesta tecnologia però per a qui l’interessi i no sàpiga per on començar, aquí us deixo un exemple senzill per provar:

Imagineu-vos que tenim 3 fitxers. Al primer li anomenarem hora1.php i contindrà el seguen codi:

?Download hora1.php
1
2
<?php $horaUnix = time(); ?>
<p><?php echo date('Y-m-d H:i:s',$horaUnix); ?></p>

Si executem aquest codi, ens mostrara la data i l’hora del sistema. Després tenim un segon fitxer al que anomenarem hora2.php que fa exactament lo mateix que l’anterior. Mes endavant comprendràs el per que.

?Download hora2.php
1
2
<?php $horaUnix = time(); ?>
<p><?php echo date('Y-m-d H:i:s',$horaUnix); ?></p>

Y a continuació, el index.html que te el següent codi:

?Download index.html
1
2
3
4
5
6
<html>
  <body>
    <esi:include src="hora1.php" />
    <esi:include src="hora2.php" />
  </body>
</html>

Arribat a aquest punt, mes o menys, segurament us haureu fet a la idea el que es vol fer. En el fitxer index.html esta indicat que s’han de afegir dos fitxers que suposadament faran alguna cosa (en aquest cas mostrar la data i l’hora del sistema).

I ara ve lo mes interessant, la configuració de Varnish. Per a que tot aixo funcioni tenim que tindre habilitat el llenguatge ESI en la configuració de Varnish i especificar el tems d’escorcoll que ha de tindre les parts que volem escorcollar de manera independent. Per fer aixo tenim que afegir al fitxer on teniu la configuració de Varnish (per defecte en /etc/varnish/default.vcl) el següent codi:

1
2
3
4
5
6
7
8
9
10
11
12
sub vcl_fetch {
 ...
      if (req.url == "/") { /* Si es la pagina principal */
              set beresp.do_esi = true; /* Activa el llenguatge ESI */
              set beresp.ttl = 24 h;    /* El temps d'escorcoll de la pagina principal serà de 24 hores */
      } elseif (req.url == "/hora1.php") { /* Si es la part 1 */
              set beresp.ttl = 1m;      /* El temps de escorcoll d'aquest fragment serà de 1 minut */
      } elseif (req.url == "/hora2.php") { /* Si es la part 2 */
              set beresp.ttl = 5m;      /* El temps de escorcoll d'aquest fragment serà de 5 minuts */
      }
 ...
 }

I ja esta, reiniciem Varnish i al entrar a la nostra web veure lo següent:

1
2
3
4
5
6
<html>
  <body>
    <p>2011-02-01 10:12:15</p>
    <p>2011-02-01 10:12:15</p>
  </body>
</html>

I si esperem 1 minut i actualitzem veurem lo següent:

1
2
3
4
5
6
<html>
  <body>
    <p>2011-02-01 10:13:15</p>
    <p>2011-02-01 10:12:15</p>
  </body>
</html>

I si esperem 5 minuts llavors s’actualitzaran ambdós paràgrafs.

I aixo es tot, aquest es un exemple senzill de com implementar ESI en la vostra web. Fixeu-vos que el fitxer principal es index.html i no index.php (encara que també funcionaria amb index.php). He volgut fer-ho amb format html per remarcar que no es l’Apache qui compila i executa el llenguatge ESI, sinó Varnish. Si accediu directament a la web evitant Varnish i mirem el codi retornat, veureu etiquetes <esi>, mentre que si passem per Varnish, lo que es mostrara serà el contingut dels fitxers.

Crec que aquest llenguatge, amb un us coherent, te molt potencial i continuaré fent proves amb ell. Si algú te interes amb aquesta tecnologia y vol fer mes proves pot posar-se en contacte amb mi a traves dels comentaris d’aquest blog, per poder fer proves conjuntes.

Deixa un comentari

L'adreça electrònica no es publicarà Els camps necessaris estan marcats amb *