Cómo usar Varnish para acelerar tu sitio web

Cómo ya adelanté en otro post (Cómo escalar un blog de WordPress), en The Next Web hacemos un uso intensivo de Varnish para servir páginas del blog desde caché con resultados sorprendentes. En este post voy a explicar qué es Varnish,  cómo lo usamos en el blog y por qué tú también deberías empezar a usarlo.

server-down-tnw

¿Qué es Varnish?

Varnish es un acelerador HTTP que funciona como un proxy reverso. Se situa por delante del servidor web, cacheando la respuesta de dicho servidor web en memoria. La próxima vez que un visitante visite la misma URL, la página será servida desde Varnish en lugar de desde el servidor web, ahorrando recursos en el backend y permitiendo más conexiones simultáneas. También se puede usar como balanceador de carga, distribuyendo peticiones a varios servidores o como control de acceso a tu servidor, por ejemplo permitiendo conexiones sólo desde la IP o grupo de IPs especificadas.

Las principales características de Varnish son:

  • Es estable y muy rápido, capaz de servir varios cientos de miles de peticiones por segundo, según ciertos benchmarks.
  • Dispone de un lenguaje propio de configuración, llamado VCL (Varnish Configuration Language), con el que es posible definir las reglas para cachear contenido. Gracias a esto es extremadamente flexible, pudiéandose configurar para solucionar problemas muy diversos.
  • Está escrito en C, y es posible extender su funcionalidad con módulos llamados VMODs, escritos asimismo en C. Puedes ver una lista de VMODs publicados aquí.
  • Ofrece soporte para GZIP y ESI (Edge Side Includes), y es capaz de recomponer una página usando ESI sin pasar por el back-end. Esto permite cachear fragmentos de la página usando tiempos de expiración diferentes, mostrando siempre contenido fresco sin necesidad de borrar de caché las secciones menos cambiantes de la página.

¿Cómo usar Varnish?

(Nota:En los ejemplos voy a utilizar el sistema operativo Ubuntu 12.04 y Apache como servidor web).

Una vez instalado Varnish desde el repositorio de tu sistema operativo o compliando el código fuente (instrucciones), hay que configurarlo para que sea el encargado de recibir todas las peticiones desde el exterior. Vamos a editar el archivo /etc/default/varnish y a configurar el demonio para que escuche desde el puerto 80 de la interfaz pública del servidor.

DAEMON_OPTS="-a :80 
 -T localhost:6082 
 -f /etc/varnish/default.vcl 
 -S /etc/varnish/secret 
 -s malloc,1G"

Lo más interesante de esta sencilla configuración es el parámetro -s. Con él indicaremos dónde queremos guardar la caché (RAM o disco) y cuanto espacio queremos reservar. Obviamente la RAM (malloc) es varios órdenes de magnitud más rápida que el disco por lo que es recomendable usarla para almacenar la caché siempre y cuanto dispongas de suficiente memoria en el servidor. Puedes usar el comando varnishd --help puedes ver que significa cada parámetro.

Hay muchas más opciones configurables pero que sólo hará falta cambiarlas en servidores con mucho tráfico (varios millones de visitas). Si estás interesado, este tutorial al respecto es muy interesante.

A continuación debemos cambiar la configuración del servidor para que deje de escuchar en el puerto 80 de la IP pública (Ya que ese socket está ocupado por Varnish). Pero esto lo veremos en el siguiente artículo. Además, voy a mostrar un ejemplo de archivo de configuración de Varnish (.vcl) como el que usamos en TNW y daré una serie de consejos prácticos para sacar el máximo rendimiento a Varnish y hacer que tus página vuelen. ¡Hasta el siguiente post!

Lee ahora: Archetype: una plantilla adaptativa para HTML5 »

  • exal

    Excelente explicación, hiciste ver facil la utilización de esta genial herramienta. Esperamos la segunda parte, Saludos

  • david

    Pablo
    Roman que buena informacion y buen blog. Por favor mande usted la segunda parte :)

  • Rayne Kestrell

    articulo imcompleto sobre varnish, he perdido un tiempo muy preciado, gracias