:::: MENU ::::

Optimización de Magento: Cache con APC + tmpfs (dos niveles)

3.67 avg. rating (71% score) - 3 votes

En este artículo comentamos la forma de configurar una cache de dos niveles en Magento, configurando el servidor (debian) con APC y creando un segundo nivel de cache en disco para mejorar todavía más el rendimiento.

Este artículo viene de uno más general en el que se trata en detalle el sistema de Cache de Magento. Ver el artículo completo en Optimización de Magento: Memoria Cache.

Como por aquí nos gusta mucho Debian, pondremos todos los ejemplos, rutas de ficheros, etc. sobre un servidor Debian Squeeze.

Instalación de APC para Magento en Debian

El primer paso para conseguir hacer funcionar Magento con APC, por supuesto, es instalarlo en nuestro servidor. Realmente es muy sencillo, pero ahí va:

root@vps2:/# apt-get install php-apc
root@vps2:/# /etc/init.d/apache2 restart

También nos resultará interesante tener un administrador donde ver las estadísticas de uso de la cache. Al descargar el paquete correspondiente, viene un gestor muy sencillo que sólo tenemos que descomprimir y mover a una carpeta nuestra Web (recomendable protegerlo convenientemente)

root@vps2:/# gzip -dc /usr/share/doc/php-apc/apc.php.gz > /path/a/mi/web/apc.php

Si accedemos al gestor que acabamos de mover, deberíamos ver algo como esto:

Gestor de Cache APC

Configuración de APC para Magento

A continuación debemos configurar los parámetros necesarios de APC para trabajar con Magento.

La configuración óptima dependerá de nuestro servidor, de la cantidad de RAM disponible, de si ejecutamos PHP como módulo o como CGI, y de un sinfin de otros parámetros, pero a continuación os indicamos una posible configuración para comentar los parámetros básicos.

La configuración se realiza en el archivo: /etc/php5/conf.d/apc.ini

extension=apc.so
apc.shm_size=90M
apc.stat=1

apc.shm_size es el tamaño que deseamos reservar para la cache APC. Un valor demasiado elevado no significa un mejor rendimiento, ya que en función de la configuración del servidor puede al mismo a hacer swapping a disco con facilidad. Es cuestión de monitorizar y probar.

apc.stat indica si APC debe comprobar si fuentes de PHP han cambiado desde que fueron cacheados en memoria. Si es un servidor en producción y no vais a tocar el código en largo tiempo, es recomendable configurarlo a «0», pero si sois de los que os gusta tocar, o se hacen ampliaciones continuas puede dar problemas y no detectar los cambios de código/recompiarlo.

Otros parámetros, como apc.cache_by_default y apc.filters os pueden servir para activar APC sólo en algunos dominios o carpetas del servidor, y ejecutando un phpinfo() podéis ver todos los parámetros posibles de configuración. Hay multitud de manuales donde se explica en detalle cada uno de ellos, así que no nos extendemos más.

Activar APC en Magento

Como comentábamos en algún artículo anterior, es posible configurar la cache de Magento con uno o con dos niveles, así que detallaremos ambos casos.

Cache de un sólo nivel con APC

Para activar este modo es necesario incluir estas líneas en el fichero de configuración de Magento, local.xml

<global>
  ...
  <cache>
    <backend>apc</fast_backend>
    <prefix>MIDOMINIO_</prefix>
   </cache>
   ...
</global>

Con esta configuración, todo el sistema de cache de Magento funcionará con APC.

Para configurar una cache en dos niveles, necesitaremos en cambio, las siguientes (ojo a las mayúsculas en los nombres):

<global>
  ...
  <cache>
    <fast_backend>Apc</fast_backend>
    <slow_backend>File</slow_backend>
    <prefix>MYSTORE_</prefix>
   </cache>
   ...
</global>

En el segundo nivel (slow_backend) podemos elegir entre los valores Database y File.

La diferencia entre uno o dos niveles podéis consultarla en el artículo previo en Optimización de Magento: Memoria Cache.

Slow Backend en Disco o en Base de datos

La decisión sobre si poner el slow_backend en disco o en base de datos es compleja, pero básicamente dependerá de nuestra configuración de servidores. Si tenemos dos servidores, uno donde corre nuestro servidor Web y otro donde corre la base de datos, seguramente obtendremos un mejor rendimiento configurando la cache en base de datos.

Sin embargo, en una configuración normal con un único servidor, esto cargaría demasiado la base de datos, ralentizando el sistema.

En ese caso, obtendremos un rendimiento óptimo con la siguiente configuración.

Slow Backend en Disco con TMPFS

La idea para mejorar el rendimiento de la tienda es configurar el slow_backend en un disco RAM. Con esto evitamos el cuello de botella que siempre supone la escritura en disco y además conseguimos utilizar de forma óptima el sistema de Cache (dos niveles).

Para crear el Disco RAM sólo tenemos que ejecutar lo siguiente:

mount -t tmpfs -o size=128m tmpfs /path/a/mi/web/var/cache/
chmod o+w /path/a/mi/web/var/cache/

Nuevamente, el tamaño del disco que creemos dependerá de la memoria disponible en nuestro servidor.

Con esto, nuestros datos de cache se escriben en RAM, lo que hace la cache mucho más rápida.

Si además queremos que el disco RAM vuelva a crearse tras un reinicio del servidor, deberemos añadir al archivo /etc/fstab las siguientes líneas:

tmpfs    /var/www/vhosts/misohi.com/httpdocs/var/cache   tmpfs   defaults,size=128m      0       0

Comprobar funcionamiento de APC en Magento

Para comprobar que nuestro sistema de cache funciona correctamente, sólo tenemos que acceder a nuestra tienda con un navegador, y luego a nuestro gestor de APC, donde podremos ver los archivos cacheados y el porcentaje de memoria utilizado, tal como se muestra a continuación.

APC aciertos y fallos

 

APC Ficheros cacheados

Resumen

En este artículo hemos visto como instalar APC en nuestro servidor Debian, y como configurarlo correctamente para funcionar con Magento, tanto en una configuración de cache de un sólo nivel como en una configuración de dos niveles.




One Comment

  • Responder Geovanny Coloma Regalado |

    Estimado Daniel, al momento tengo un problema en la entrega de un proyecto en magento, es respecto al rendimiento, el cliente no esta satisfecho con los tiempos de respuesta y creen que todo depende de magento, de que manera podria tener un analisis de lo que esta pasando y poder tomar los correctivos necesarios a nivel de magento y poder informar lo que no corresponde a magento para que el cliente lo haga.

    De antemano muchas gracias

Hey! Qué opinas sobre el artículo?