Cristina Alcantarilla
INFORMÁTICA & DISEÑADORA
Problemas de memcached

Memcached: Es un sistema distribuido de propósito general para caché que se instala en un servidor y funciona como un servicio más de la máquina, escuchando por un puerto que configuramos. (Ver Wikipedia). Este servidor es completamente independiente de PHP y se puede usar en general desde cualquier lenguaje de programación que tenga librerías para interactuar con él.

Librería memcache de PHP : Es una librería ya algo antigua que nos encapsula el acceso a Memcached. Sirve como primera aproximación y es muy fácil de instalar y activar pero no aprovecha todo el potencial de memcached.

Librería memcached de PHP: Es una librería bastante más moderna, algo complicada de instalar en según qué distribuciones Linux (pues requiere compilar las librerías libmemcached y la propia librería si queremos habilitar serializadores especiales como IgBinary) pero que nos da mejor rendimiento y aprovecha mejor las posibilidades de memcached.

Memcached es un sistema de cacheado de propósito general. Cachear es algo que en aplicaciones con poca actividad no nos supondrá ningún beneficio pero que en entornos de alta disponibilidad es clave para asegurar que una subida de actividad no nos dejará sin servicio. El concepto es simple, si algo cambia poco, guárdatelo ya procesado y listo para servir sin tener que acceder a la BBDD y procesar esos datos. Aunque una conexión a BBDD y su query vaya rápido, es mucho más rápido leer directamente de disco y aún más rápido guardarlo en un buffer de memoria (como hacen Memcached o también por ejemplo APC).

Problemas de memcached

– Por cada clave solamente se permite almacenar 1 Mb de datos serializados. Esto es una auténtica burrada y cabe medio quijote pero según lo que queramos almacenar podemos pasarnos. Lo cachondo del caso es que no salta excepción sino que simplemente devuelve false.

– El servidor de memcached tiene definida una memoria de uso. Si cacheamos muchas cosas, se puede producir un overflow y las claves más antiguas empiezan a expirar para hacer sitio a las nuevas. Mucho cuidado pues con configurar correctamente esto.

– En alta escalabilidad, hasta que está todo cacheado puede darse el caso de muchas peticiones intentando cachear lo mismo simultáneamente. Este fenómeno es conocido como cache storming y aunque dura poco podemos tener problemas en aplicaciones donde de golpe la demanda aumenta drásticamente.

– No se pueden hacer querys para recuperar las keys almacenadas ni un rango de las mismas. Es decir, mucho cuidado con elegir las keys en los setData ya que nos podemos encontrar con no saber regenerarlas y por tanto no poder expirar keys concretas.

– Si no dimensionamos bien la aplicación, podemos estar haciendo muchos setData y pocos getData (porque el tiempo de expiración es muy bajo o porque cacheamos datos de poca consulta).

– Si confiamos en que memcached aguantará la carga y no optimizamos la aplicación, el día que se cae memcached, adios aplicación web en escasos minutos.

– Si los datos a cachear son muy grandes, la serialización de los mismos se vuelve muy costosa. Esto es especialmente grave con la vieja librería memcache y subsanado en parte con memcached+igbinary. Siempre irá más rápido que una query, especialmente si hacemos varias joins, pero tal vez la ganancia no sea tan grande como esperamos.

– Memcached no lleva autenticación. Es decir, cualquiera con acceso al servidor, si conoce las keys puede recuperar nuestros datos. Debido a esto, raramente está instalado en servidores compartidos.

 

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache-on-ubuntu-12-04

http://www.ricardclau.com/2011/03/desmitificando-memcached-i/

Share Button

Deja un comentario