Velocidad: Magento con APC y Memcached


17

Hemos estudiado muchos foros y no sabemos la respuesta a lo siguiente. Tenemos ambos APCe Memcacheinstalados en nuestros servidores. No estamos seguros de cuál es la configuración correcta y mejor.

Mi pregunta

¿Cuáles son / son las mejores configuraciones para ejecutar Magento utilizando tanto Memcache + APC al mismo tiempo? (¿O no es esto inteligente en absoluto)

Investigación de fondo

Aquí se recomienda Memcache y APC como caché rápida y lenta (pero sin disco). Parece que esto solo funciona cuando tienes suficiente RAM (y seguro)

Y este artículo trata sobre Memcache o APC, y tenemos ambos

Y aquí dice que Memcache solo funciona realmente cuando también tienes un backend lento definido

Y creo que este artículo dice lo mismo

Esta es la solución de mi ISP para local.xml

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

Situación

Alojamiento compartido Brim FPC instalado: http://ecommerce.brimllc.com/full-page-cache-magento.html (este FPC también tiene un caché de archivos escalable para hacerlo más complejo)


@sonassi, ¿por qué no en lugar de memcached-tag? code.google.com/p/memcached-tag

Respuestas:


26

Debe comprender la clara distinción entre estos dos productos para comprender cómo usarlos.

  • APC es tanto un caché de OPCode como un backend rápido
  • Memcache es solo un backend rápido

Uso de APC como caché de OPCode

Simplemente instale el módulo en su servidor

pecl install apc

Y habilítalo en tu php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

Luego habilita y ajusta la configuración de tiempo de ejecución para adaptarla, por ejemplo.

apc.enabled
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

Luego reinicie PHP / Apache

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Después de eso, no hay nada más que hacer. Confirme que APC está habilitado con un rápido phpinfo(), pero de lo contrario, en este punto, la porción de caché OPCode de APC está activa.

No es necesario configurar nada del lado de Magento.

Usando APC como un backend rápido

Necesita agregar lo siguiente a su ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

Luego, vacíe los cachés de su tienda existente. Para verificar que funciona, cargue una página en el front-end y el ./var/cachedirectorio debe permanecer vacío.

Usando Memcache como un backend rápido

Deberá instalar Memcache como una extensión PHP e instalar el respectivo Memcache Daemon (Memcached) en su servidor.

pecl install memcache

Y habilítelo en su php.ini

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Luego instale Memcached en el servidor. Para RH / Centos, ajuste la URL para adaptarla a su versión de lanzamiento y arquitectura de CPU.

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

Luego modifique Magento para usar Memcache como un backend rápido, cambie la ruta del socket a una conexión TCP / IP para adaptarla.

<cache>
  <slow_backend>database</slow_backend>

  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>

  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

Las advertencias de Memcache y el etiquetado: ¿qué está almacenando?

Memcache solo admite un solo nivel de relaciones clave-valor, por lo que no puede almacenar las etiquetas de caché de Magento (que se utilizan para vaciar los datos de caché de forma independiente). Como resultado, debe especificar a slow_backendpara mantener la relación de la etiqueta de contenido de la memoria caché o no definir ninguna.

Si define a slow_backend, corre el riesgo de que las etiquetas de caché crezcan tanto que se niegue el rendimiento; También existe el problema inherente de que no puede escalar en varios servidores si cada servidor mantiene sus propias etiquetas de caché.

Por lo tanto, cuando se usa Memcache, el mejor enfoque (con la advertencia de que no puede vaciar las cachés de forma independiente), es no molestarse en usar el slow_backend.

En cuyo caso, sugerimos eliminarlo <slow_backend>database</slow_backend>y reemplazarlo con:

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

Esto interrumpirá / deshabilitará el segundo nivel de almacenamiento en caché (y evitará el almacenamiento de etiquetas), pero aún permitirá el rendimiento de Memcache.

Cual usar

Si se trata de una implementación de un solo servidor , no hay nada malo en usar APC para todo.

Si se trata de una configuración distribuida , deberá usar Memcache como el backend rápido (para que todas las máquinas puedan acceder a la tienda común).

Más preocupante es que si su proveedor de alojamiento no puede indicarle la configuración correcta para usar, ciertamente está con el host incorrecto.


Atribuciones: sonassi.com , php.net , repoforge.org


Cuando trato de desactivar slow_backend_cache usando este truco, me meto slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceen Mage 1.7.0.2
Aaron Pollock

6

Estoy bastante de acuerdo con las respuestas anteriores, pero aquí hay una pequeña precisión para completarlo: Sí, apc se puede usar como un motor de almacenamiento en caché y como un optimizador de código de bytes PHP. Pero hay que aclarar dos puntos:

  • Como backend rápido, las directivas de configuración utilizadas por APC para comprender cómo debe guardar los datos se administran a través de las directivas apc.user_%. Los otros solo se refieren a la memoria caché de código de bytes (por ejemplo, apc.ttl: la duración de vencimiento de la memoria caché de código de operación, apc.user_ttl: la duración de vencimiento de los datos almacenados en caché por su Magento).

  • Y como un backend rápido, APC tiene exactamente el mismo comportamiento que memcached: no administra las etiquetas de caché, y para Magento requiere un backend lento configurado (o usa de manera predeterminada el archivo backend lento).

Según mi experiencia, en sitios web con mucho tráfico, si usa apc solo como optimizador de código de bytes, necesita entre 96 y 256Mo en el valor de configuración apc.shm_size. También aumente apc.num_files_hint de 1000 a 15000: de forma predeterminada, el código de bytes de caché de apc solo almacena 1000 archivos y Magento contiene alrededor de ~ 20,000 archivos PHP y PHTML de forma predeterminada ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Personalice este valor con su código fuente.

Si usa APC o memcached como back-end rápido, es difícil proporcionarle algunos consejos sobre la memoria requerida: realmente depende de la política de caché aplicada en su instancia.

Por ahora, su configuración de caché funciona así:

  • cada contenido se almacena en memcached y en archivo
  • El backend rápido siempre se solicita antes del backend lento
  • si no se encuentra nada en el backend rápido, magento busca en el backend lento

¿Por qué estos dos niveles de gestión? Memcached y otros backends rápidos son almacenamientos de memoria. Por lo tanto, significa que los datos pueden corromperse o desaparecer.

¿Cómo puede aumentar el rendimiento de esta configuración?

Desactivar la segunda escritura es probablemente una de las opciones más eficientes. Esto se explica en el cuarto artículo que mencionaste. Pero no puede usar sin modificaciones el código fuente de slow_backend_store_data. En su contexto, no recomiendo realizar esta personalización por los siguientes motivos: sus datos almacenados en caché nunca serán controlados. Almacenará datos en la memoria, obtendrá rendimiento, pero tal vez envíe a sus visitantes un contenido no válido. Por lo tanto, debe encontrar una solución que le garantice tener acceso a la memoria (para un mejor rendimiento), control de escritura y la capacidad de deshabilitar el almacenamiento en caché de slow_backend_store_data. Puede llegar a este contexto de la siguiente manera:

  • reemplace el servidor memcached por uno redis (redis puede controlar la lectura y escritura como lo hace un sistema de archivos) y continúe usando apc como optimizador de código de bytes

  • * asegúrese de que puede usar la opción slow_backend_store_data * ya sea personalizando su código fuente o bien cambiando a un backend lento de base de datos (sí, aumenta la carga de su servidor de base de datos, pero si su política de caché está bien definida, no debería un problema)

  • * Desactivar la opción slow_backend_store_data * : en esta configuración ya no es necesario, tienes el control de lectura y escritura realizado por redis.


2

Como nota adicional a esto, descubrimos que cuando se usa APC con Magento (para el almacenamiento en caché del código de operación, usamos Redis para la página convencional de Magento y el almacenamiento en caché de bloque), entonces es importante asegurarse de que la configuración de estadísticas sea 0 en producción (pero 1 en desarrollo):

apc.stat = 0

La configuración apc.stat se usa para determinar si se debe verificar un script en cada solicitud para determinar si se ha modificado ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) y, por lo tanto, establecer esto en 0 en un entorno de producción traerá el beneficio de rendimiento de que APC no realice esta verificación con cada solicitud.

Vale la pena señalar que una vez que apc.stat se establece en 0, es probable que tenga que reiniciar el proceso de su servidor web para recoger los cambios de archivos (es decir, después de la implementación), pero esto debería ser parte de su estrategia posterior a la implementación de todos modos.


1

Lo mejor que hicimos para acelerar el backend de manera significativa es instalar REDIS como un controlador de caché . Ahora también es compatible con el núcleo de Magento 1.8 y superior.

Nada se compara ... ahora es click click clickerdy ​​click

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

Además, podría considerar agregar la extensión de sesión Redis para también agregar sesiones al servidor de memoria redis ...

¡Buena suerte!


0

Desde este archivo local.xml, Magento recogerá la última entrada y usará Memcache. Creo que hay una confusión entre cómo APC y Memcache pueden trabajar con Magento.

Primero, APC tiene 2 usos:

  • almacenamiento en caché de opcode: compile sus archivos php en opcode, haciendo que la ejecución del script sea aproximadamente un 25% más rápida
  • almacenamiento de clave / valor: Magento puede utilizarlo como un sistema de caché.

Memcache, por otro lado, es solo un almacén de clave / valor. La gran ventaja de Memcache es que puede funcionar en modo cliente-servidor, por lo que varios servidores frontend pueden usar la misma caché, lo cual es imprescindible si tiene varios servidores que sirven al mismo sitio web.

La configuración más común es instalar APC para obtener el almacenamiento en caché del código de operación (para obtener una ejecución de script ~ 25% más rápida) y usar Memcache como servidor de caché. También utilicé APC como sistema de caché y, aunque en teoría debería ser un poco más rápido que Memcache, no se puede notar la diferencia.


Entonces, si leo esto: la configuración más común es instalar APC para obtener el almacenamiento en caché del código de operación (para obtener una ejecución de script ~ 25% más rápida) y usar Memcache como un servidor de caché. Entonces, ¿cómo podemos usar ambos juntos? ¿Es así: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

Para usar ambos juntos, no tiene que declarar nada que ver con APC.
Ben Lessani - Sonassi

¿Entonces el código sería todo? <cache> <backend> memcached </backend> y
omita

Adicionalmente. Para mí, la velocidad de back-end siempre ha sido una medida de la velocidad general (ya que FPC, etc., no se aplica aquí) ...
snh_nl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.