Caché en memoria, acelera tu backend

Actualizado en Enero 2013. Categoría: Blog

Usa el icono para acceder a las secciones del artículo.

Introduccion

Uno de los elementos que se usa para optimizar el rendimiento de la web es la caché. El objetivo a conseguir es ahorrar en la realización de un proceso costoso reduciendo dicho coste en tiempo y en recursos.

En las aplicaciones Web dinámicas, los procesos costoso pueden ser por ejemplo, el acceso a una base de datos, realizar cálculos pesados, consultas desde backend a un Webservice, etc.

Si quieres saber cual es el funcionamiento de la caché en memoria, cuando se aconseja y cuando no, factores a tener en cuenta y sobretodo donde se notará la mejoría en el rendimiento, sigue leyendo ...

¿Cómo funciona?

El proceso que se lleva a cabo cuando se usa caché en memoria, de forma simplificada, es el siguiente:

  • Se consulta si la información que se solicita está ya en caché o no.
  • Si se encuentra:
    • devuelve la información solicitada.
  • Si no se encuentra:
    • se consulta al sistema para generar la información
    • se almacena en cache (para mostrarla en la siguiente petición)
  • se muestra la información generada

Cuando en Funomy pensamos en una implementación concreta que pudiera valer como ejemplo de esta técnica, Memcached fue la que más rápido nos vino a la mente, está muy extendida, es código abierto y gratuita...perfecta para crear ejemplos.

A tener en cuenta

¿Qué tengo que tener en cuenta a la hora de usar Memcached?

  • El tamaño de la información que se almacenará en la caché.
  • El tiempo de caducidad de dicha información.
  • La calidad de la información en caché, es decir si es importante que esté actualizada al momento o si no es necesario que el 100% de la información este actualizada al instante.
  • El consumo de memoria aumentará con el uso de Memcached, ya que es ahí donde se almacenará la información, es necesario hacer un buen estudio del consumo y del plan de capacidad antes de implantar una solución de caché como esta.

¿Cuando usarlo?

Cuando se dan algunas de las condiciones en cuanto al contenido y el tipo de consultas que se realizan en la web, como pueden ser:

  • Contenido que se solicita continuamente.
  • Contenido cuyo calculo es costoso.
  • Contenido compartido entre distintos usuarios.
  • Contenido que no es necesario que esté actualizado al instante.

Cuando no usarlo

Aunque este sistema de gestión de la caché es muy eficaz, no siempre es aconsejable su uso. Algunos casos donde no se recomienda son los siguientes:

  • Los objetos a almacenar en memoria son mayores de 1MB, son blobs enormes o elementos de streaming.
  • La información necesita estar actualizándose constantemente y prima la validez de la información frente al tiempo de espera.
  • Las claves de acceso a los elementos están por encima de las claves permitidas en Memcached, es decir, mayores de 256 caracteres, aunque se espera que aumenten hasta 65k.
  • Se necesita persistencia, Memcached no es una base de datos, así que hay que evitar pensar en Memcached como un almacén donde la información siempre va a estar.
  • Si el entorno es inseguro. En la implementación actual de Memcached ya es posible autenticarse mediante SASL por lo que ya no es un problema su uso en “entornos hostiles”, es recomendable además establecer filtros de acceso por IP y Puerto.

¿se notará?

¿Donde se notará la mejoría en el rendimiento de mi Web?

Al configurar adecuadamente la caché en memoria notaremos mejoría en aquellas páginas donde el contenido, cuya generación o acceso tenia un coste muy elevado en tiempo y recursos, se recupera ahora de la caché, está mejora se verá en los tiempos de respuesta y fundamentalmente en el tiempo de generación de los datos.

El tiempo de espera, cuando se realiza una petición a la página Web, que ha de generar los datos para mostrarlos al usuario, se verá reducido ya que la generación de los mismos sera más rápida. Utilizar esta técnica combinada con otras de las comentadas en el blog de Funomy hará que la experiencia de nuestros usuarios mejore sustancialmente.