Memcached: almacenamiento distribuido de objetos en memoria
El objetivo de este artículo es el de explicar qué es Memcached y cómo puede ayudarnos a la hora de optimizar nuestras aplicaciones web a medida que crecen en número de usuarios y por tanto en consumo de recursos.
Memcached es simple pero a la vez muy potente, su objetivo es el de almacenar objetos en memoria RAM a los que podamos acceder a posteriori cuando sea necesario. Se puede almacenar cualquier clase de objeto que estará asociado a un identificador único.
Memcached no está pensado para sustituir a una base de datos ya que los objetos almacenados en ella no son persistentes, es decir, se almacenan únicamente en memoria RAM y nunca son volcados a disco. La clave es colocar a Memcached entre nuestra aplicación web y el sistema gestor de bases de datos que estemos usando (por ejemplo, MySQL). Cuando en la aplicación web se necesite un dato primero se consultará su existencia en Memcached, si el dato está disponible habremos obtenido el objeto deseado directamente de memoria RAM y a una velocidad mucho mayor que si se hubiera tenido que ir a buscar ese mismo dato a disco. En caso de que el dato no se encuentre en Memcached se procederá a obtener el dato del sistema gestor de bases de datos y a almacenarlo en Memcached para que la próxima vez que se intente acceder ya se encuentre en memoria. A continuación se puede observar el pseudocódigo equivalente a una parte de una aplicación web que use Memcached:
funcion obtener_objeto(objid)
{
objeto = memcached_get("obj".objid)
si(definido(objeto))
devolver objeto
objeto = basedatos_get(objid)
memcached_set("obj".objid, objeto)
devolver objeto
}
Por tanto sólo la primera vez que se necesite un objeto se tendrá que ir a disco a buscarlo y las sucesivas veces este objeto se encontrará en memoria para ser servido directamente. Esto es cierto mientras únicamente se produzcan lecturas en la base de datos, sin embargo cuando se producen escrituras la cosa cambia y hay que afrontar los problemas que surgen. Cuando se escribe un dato lo más sencillo es eliminar el objeto de memcached, de manera que la próxima vez éste no sea encontrado y se cargue desde el sistema gestor de bases de datos. Existen otras técnicas más complicadas para ganar en rendimiento en relación a las escrituras, pero se escapan de la visión general que se quiere dar en este artículo sobre este sistema. Para establecer un símil fácil de comprender para gente que ya conozca la arquitectura de un procesador podríamos decir que nuestra aplicación web es como la CPU, Memcached sería la caché L1 y el sistema gestor de bases de datos sería la caché L2. Memcached también permite agrupar servidores formando clústeres, de esta manera los datos se distribuyen entre los diferentes nodos del cluster y se gana en capacidad y en tolerancia a fallos.
En la propia página web de Memcached se puede ver como es usado en sitios web con grandes cargas de usuarios como la Wikipedia, Twitter, Youtube, WordPress, etc.
En definitiva se puede decir que el uso de Memcached es algo muy recomendado en nuestras aplicaciones web, ya que ayudará a que sean más escalables y que expriman aún más la capacidad de nuestros servidores.
[...] Memcached: almacenamiento distribuido de objetos en memoria http://www.danielvigueras.com/desarrollo-web/memcached-almacenamien… por sam2001 hace 10 segundos [...]