Optimizando entornos LAMP con Memcached

Al crear un portal en Internet, tarde o temprano encontraremos que a medida que crecen el número de visitantes, el rendimiento del servidor se reduce hasta llegar al punto de ser inviable su uso. Para solucionar este problema es recomendable recurrir a herramientas de cacheo como Memcached, que permiten reducir

Artículos recientes

Al crear un portal en Internet, tarde o temprano encontraremos que a medida que crecen el número de visitantes, el rendimiento del servidor se reduce hasta llegar al punto de ser inviable su uso.
Para solucionar este problema es recomendable recurrir a herramientas de cacheo como Memcached, que permiten reducir los recursos utilizados por las bases de datos y la memoria necesitada por cada proceso del servidor web para atender las peticiones de los visitantes.
La principal ventaja de Memcached sobre otras alternativas de cacheo es la de hacer uso de la memoria RAM para almacenar los datos, obteniendo una velocidad de respuesta mucho más rápida que utilizando otros medios de almacenamiento como discos duros.
Frente a otros sistemas de cacheo en memoria como APC, las mejoras que aporta Memcached se centran en ser un sistema de cacheo distribuido. Permitiendo compartir dos o más servidores una misma instalación de Memcached, a la que acceden todos los servidores para recuperar, añadir y modificar datos.
Los tan utilizados actualmente gestores de contenidos, son unas de las herramientas que más beneficio obtienen de Memcached ya que hacen un uso intensivo de los gestores de base de datos.
El excelente rendimiento de Memcached la ha convertido en una de las herramientas más utilizadas en portales de Internet con millones de visitantes, como YouTube, Wikipedia o Facebook que utiliza una versión mejorada de esta herramienta.

INSTALACIÓN

Para utilizar Memcached con PHP es necesario instalar el servidor Memcached y las librerías adecuadas de PHP. Por ejemplo para instalar Memcached en Debian ejecutamos el comando

# aptitude install memcached php5-memcache

Al finalizar la instalación se inicia un demonio de Memcached en el puerto 11211.

PRIMEROS PASOS

El funcionamiento interno de Memcached se reduce a la creación de demonios que atienden las peticiones recibidas en el servidor en que está instalado.
Podemos arrancar tantos demonios de Memcached como queramos, pero es recomendable utilizar un demonio por cada conjunto de datos a cachear, para simplificar la programación y mantenimiento. Para iniciar un nuevo demonio ejecutamos

# memcached -u www-data -p 11211 -m 2 -d

donde utilizamos los parámetros: -u www-data, usuario que toma el control del demonio; -p 11211, puerto utilizado para atender las solicitudes; -m 2, memoria asignada; y -d, para iniciar Memcached como demonio.
Para iniciar más de un demonio de Memcached, volvemos a ejecutar este mismo comando, dejando todos los parámetros con estos mismos valores, excepto -p donde escribimos otros puertos libres en el servidor, como por ejemplo 11212, 11213 ó 11214.

ESTADO DE LOS DEMONIOS

Arrancados los demonios de Memcached, podemos controlar su estado con el comando

$ telnet localhost 11211

que realiza una conexión al demonio Memcached del puerto 11211.
En la línea de comandos mostrada podemos guardar y consultar los datos almacenados en memoria para testear el correcto funcionamiento del demonio. Por ejemplo

set test 1 0 2
texto
STORED
get test
VALUE test 1 2
texto
END

OPTIMIZANDO MEMCACHED

El parámetro más importante para optimizar los demonios de Memcached es -m, ya que indica la memoria reservada para su ejecución. El valor óptimo de este parámetro es igual al tamaño máximo de los datos a almacenar, por ejemplo si una caché ocupa 50MB ejecutamos

# memcached -u www-data -p 11211 -m 50 -d

En caso de no caber en la memoria asignada un dato a cachear, el dato más antiguo es reemplazado por el nuevo.