¿Qué caché PHP (opcode) se debe usar y por qué?

44

Sigo escuchando sobre algunos cachés PHP (opcode) como APC, XCache, Memcache, eAccelerator, etc.

Pero nunca pude averiguar cómo elegir uno. Además del beneficio de rendimiento, que se supone que debe proporcionar un sistema de almacenamiento en caché, qué otros factores deberían ser motivo de preocupación.

¿Por qué dirás que el sistema de caché X es mejor que Y? Estoy menos preocupado por el aumento relativo del rendimiento. Pequeñas diferencias entre dos sistemas cualquiera importan menos.

Si no es posible una respuesta genérica a mi pregunta, aquí hay algunos consejos. Utilizo VPS dedicado con Mediatemple (con acceso de root). RAM es 512 MB (físico) + 400 MB (intercambio) Estoy preocupado por WordPress y sus primos WordPress-MU y BuddyPress. El 90% de nuestros códigos / sitios pertenecen a la familia de WordPress.

Gracias de antemano por alguna ayuda.

rahul286
fuente

Respuestas:

33

Los productos que enumera tienen diferentes propósitos.

Caches OPCode

Hay muchos Aceleradores PHP (OPCaches) como se ve en esta lista de Wikipedia . Como es común con los productos de código abierto, todos son bastante similares. XCache es el acelerador PHP de lighttp, y es la opción predeterminada cuando ejecuta ese HTTPd. Funciona bien con Apache también, sin embargo, APC parece ser un poco más "socialmente bueno con los demás" socialmente hablando, siendo oficialmente compatible como parte de PHP, y se lanza paso a paso con la distribución oficial de PHP.

Abandoné el uso de eAccelerator debido a su lento desarrollo y retraso con respecto a los lanzamientos de PHP, y el estado oficial bendecido que APC ofrece con un rendimiento similar.

Estos productos generalmente son de entrada; sin cambio de código, aumento instantáneo del rendimiento. Con grandes bases de código (Drupal, Wordpress), el rendimiento puede ser hasta 3 veces mejor al tiempo que reduce el tiempo de respuesta y el uso de memoria.

Almacenamiento en caché de datos

Memcache es un producto ligeramente diferente: puede considerarlo como un sistema de valores clave ligero que se puede escalar a varios servidores . El software debe ser mejorado para admitir Memcache, y resuelve ciertos problemas mejor que otros. Si tuviera una lista de valores de acciones en tiempo real en su sitio web, puede usar Memcache para mantener una lista residente del valor actual que se muestra en su sitio web. Puede usarlo para almacenar datos de sesión para su reutilización a corto plazo. No lo usaría para otras cosas, como cachés de página completa, o como reemplazo de MySQL.

También hay complementos de Wordpress como WP-Super-Cache que pueden mejorar drásticamente el rendimiento de Wordpress (de hecho, WP-Super-Cache puede rivalizar con sitios basados ​​en HTML estático en muchos casos)

En resumen: recomendaría APC si desea un "configúrelo y olvídelo, producto bien compatible".

SirStan
fuente
Esta respuesta se está discutiendo en Meta: meta.stackexchange.com/questions/15474/…
Brad Gilbert
Rellene " [4]: http://" para arreglarlo.
Brad Gilbert
Muchas gracias SirStan! Su respuesta no solo resolvió mi problema, sino que también me ayudó a comprender mejor el mundo del almacenamiento en caché. Solo quiero preguntarte una cosa más. Ya estoy usando wp-supercache. ¿Es buena idea combinarlo con APC? ¿APC mejorará aún más el rendimiento de manera significativa? ¿APC y Wp-SuperCache trabajarán juntos? ¿Los necesito a ambos? ¿O APC hará que Wp-SuperCache sea redundante?
rahul286
Nota: APC realiza el almacenamiento en caché de datos y el almacenamiento en caché de código operativo.
lo_fye
2
Esta respuesta ahora está muy anticuada. Es poco probable que APC se actualice para futuras versiones de PHP que hayan sido reemplazadas por el optimizador de Zend y el caché de código operativo (ahora conocido como opcache) desde la versión 5.5. Sin embargo, no he visto una diferencia sustancial en el rendimiento ( symcbean.blogspot.co.uk/2013/09/… ). Además, la falta de soporte de datos en opcache y la falta de recuperación de memoria pueden hacer que la actualización del contador sea productiva para algunos.
symcbean
6

APC se integrará en PHP6, por lo que es una opción lógica. Lo uso, y el aumento de rendimiento es increíble. Si necesita almacenar en caché algo que no sean códigos de operación (es decir, resultados de consultas de db), también puede usar APC para eso, pero no es posible compartir cachés APC entre varios servidores. Si solo necesita almacenar en caché en un solo servidor, APC es excelente. Si necesita escalar a varios servidores y desea compartir una memoria caché entre ellos, memcached es su hombre.

Sin embargo, una cosa que haría es crear una clase de contenedor para cualquier almacenamiento en caché (sin código de operación) que haga. De esa manera, puede cambiar el motor de almacenamiento en caché sin cambiar su código.

lo_fye
fuente
GUAU. Si hubiera sabido el estado oficial de APC, habría cambiado a largo plazo ... :-) Tampoco sabía mucho sobre la diferencia de caché opcode / non-opcode. Como una elección personal, no quiero pasar por encima de crear clases de envoltura o modificar la fuente de mis aplicaciones para ayudarlas a adaptarse con el almacenamiento en caché.
rahul286
66
Tenga en cuenta que, dado que PHP 5.5 integró Zend Opcache como caché de código operativo "oficial", creo que es poco probable que cambien a APC para PHP 6.
Matteo Tassinari
1
Para corregir esto: PHP 5.5 de hecho viene con Zend Opcache. No habrá PHP 6. Habrá un PHP 7 en su lugar. APC debe considerarse casi (?) Obsoleto.
Jisse Reitsma
6

Solo para notar que las cosas han cambiado un poco y parece que APC no se incluirá en el núcleo de PHP 6.

APC tiene un desarrollo lento y parece que nunca será compatible con PHP 5.5. Por eso, parece que los chicos de PHP configurarán la extensión de caché de código de operación Zend OPCache como la extensión PHP CORE. Te importa leer más aquí http://wiki.php.net/rfc/optimizerplus .

Nota importante: Zend OPCache no tiene caché de datos de usuario como APC, por lo que si necesita caché de datos de usuario, puede usarlo junto con Memcache.

Nemke
fuente
1
También invalida todo el caché cuando se llena (las entradas inválidas NO se eliminan), por lo tanto, si tiene más código que memoria o despliega con frecuencia, espere ver picos de rendimiento.
symcbean
3

Si ejecuta la versión PHP al menos 5.50, OpCache es su mejor opción (biblioteca nativa PHP / PECL). Debe venir precompilado si se instala desde binario.

http://php.net/manual/en/book.opcache.php

Si ejecuta la versión PHP anterior a la 5.5, APC (caché OpCode nativo de PHP / PECL) sería la opción más simple, aunque se considera no mantenida y muerta:

http://php.net/manual/en/book.apc.php

El uso de la funcionalidad nativa OpCache de PHP debería ahorrarle la molestia de mantener bibliotecas de terceros.

recurse
fuente
1
Si ejecuta PHP <5.5, lo primero que debe hacer es actualizarlo.
Michael Hampton
@ michael-hampton :: De hecho! Pero en algunos casos raros no puede actualizar PHP sin actualizar el sistema operativo, lo que incluso puede significar un nuevo requisito de hardware. Ejemplo: trabajo para una empresa que ejecuta servidores IBM i-series, versión 6, algunas cosas. Nuestra versión de PHP es 5.4.3. Dado que IBM confía en Zend para portar versiones de PHP, PHP 5.6 requiere una versión más nueva del sistema operativo IBM-i - 7.1 o posterior (y posteriormente una versión más nueva del servidor Zend PHP), que requiere nuevos servidores Power-8, etc. ... meh
recurse
0

Memcache almacena en caché los pares clave / valor, no los códigos de operación. Puede usarlo junto con uno de los cachés de código de operación.

usuario10699
fuente
Parece de la respuesta de SirStan (abajo) que Memcache puede necesitar que modifique mis aplicaciones PHP. En realidad estoy usando Wordpress y modificar su código central no será una buena idea.
rahul286