Quel cache PHP (opcode) on doit utiliser et pourquoi?

44

Je continue à entendre parler de certains caches PHP (opcode) tels que - APC, XCache, Memcache, eAccelerator, etc.

Mais je n'arrivais pas à comprendre comment en choisir un. Outre les avantages en termes de performances qu'un système de mise en cache est censé apporter, les autres facteurs doivent être un sujet de préoccupation.

Vous voulez dire pourquoi le système de cache X est meilleur que le Y? Je suis moins préoccupé par le gain de performance relative. De petites différences entre deux systèmes quelconques importent moins.

Si une réponse générique à ma question n'est pas possible, voici quelques indications. J'utilise VPS dédié avec Mediatemple (avec accès root). La mémoire vive est de 512 Mo (physique) + 400 Mo (échange). Je suis préoccupé par WordPress et ses cousins, WordPress-MU et BuddyPress. 90% de nos codes / sites appartiennent à la famille WordPress.

Merci d'avance pour l'aide.

rahul286
la source

Réponses:

33

Les produits que vous répertoriez ont des objectifs différents.

Caches OPCode

Il existe de nombreux accélérateurs PHP (OPCaches), comme indiqué sur cette liste Wikipedia . Comme c'est souvent le cas avec les produits open source, ils sont tous assez similaires. XCache est l'accélérateur PHP lighttp et constitue le choix par défaut lorsque vous exécutez HTTPd. Cela fonctionne également bien avec Apache, mais APC semble être légèrement plus socialement socialement, étant officiellement pris en charge dans le cadre de PHP et publié parallèlement à la distribution officielle de PHP.

J'ai abandonné usign eAccelerator en raison du ralentissement de son développement et du retard pris par rapport aux versions de PHP, et au statut béni officiel offert par APC avec des performances similaires.

Ces produits sont généralement drop in; pas de changement de code pour améliorer instantanément les performances. Avec des bases de code volumineuses (Drupal, Wordpress), les performances peuvent être jusqu'à trois fois meilleures, tout en réduisant le temps de réponse et l'utilisation de la mémoire.

Mise en cache des données

Memcache est un produit légèrement différent. Vous pourriez le considérer comme un système léger à valeur clé pouvant être mis à l'échelle sur plusieurs serveurs . Les logiciels doivent être améliorés pour prendre en charge Memcache et résoudre certains problèmes mieux que d’autres. Si vous avez une liste de valeurs boursières en temps réel sur votre site Web, vous pouvez utiliser Memcache pour conserver une liste de résidents de la valeur actuelle affichée sur l'ensemble de votre site Web. Vous pouvez l'utiliser pour stocker des données de session pour une réutilisation à court terme. Vous ne l'utiliseriez pas pour d'autres tâches, telles que des caches de pages complètes, ou pour remplacer MySQL.

Il existe également des extensions Wordpress, telles que WP-Super-Cache, qui peuvent considérablement améliorer les performances de Wordpress (en fait, WP-Super-Cache peut rivaliser avec des sites HTML statiques dans de nombreux cas).

En résumé - Je recommanderais vivement APC si vous voulez un produit "installez-le et oubliez-le, produit bien pris en charge".

SirStan
la source
Cette réponse est en cours de discussion sur Meta: meta.stackexchange.com/questions/15474/…
Brad Gilbert
Remplissez " [4]: http://" pour le réparer.
Brad Gilbert
Merci beaucoup SirStan! Votre réponse a non seulement résolu mon problème, mais m'a aussi aidé à mieux comprendre le monde de la mise en cache. Je veux juste vous demander une dernière chose. J'utilise déjà wp-supercache. Est-ce une bonne idée de le combiner avec APC? APC va-t-il encore améliorer ses performances? APC et Wp-SuperCache fonctionneront-ils ensemble? Ai-je besoin des deux? Ou APC rendra Wp-SuperCache redondant?
rahul286
Remarque: APC effectue à la fois la mise en cache des données et la mise en cache du code op.
lo_fye
2
Cette réponse est maintenant très datée. Il est peu probable que APC soit mis à jour pour les futures versions de PHP ayant été remplacé par l'optimiseur et le cache d'opcode de Zend (maintenant appelé opcache) depuis la version 5.5. Cependant, je n'ai pas constaté de différence de performances substantielle ( symcbean.blogspot.co.uk/2013/09/… ). De plus, le manque de prise en charge des données dans opcache et le manque de récupération de mémoire peuvent rendre la mise à niveau contre-productive pour certains.
symcbean
6

APC sera intégré à PHP6, ce qui en fait un choix logique. Je l'utilise, et l'amélioration de la performance est incroyable. Si vous devez mettre en cache autre chose que des codes d'opération (résultats de requête de base de données, par exemple), vous pouvez également utiliser APC, mais il n'est pas possible de partager des caches APC entre plusieurs serveurs. Si vous avez seulement besoin de mettre en cache sur un seul serveur, APC est génial. Si vous avez besoin de passer à plusieurs serveurs et souhaitez partager un cache entre eux, memcached est votre homme.

Une chose que je ferais, cependant, est de créer une classe wrapper pour toute mise en cache (non-opcode) que vous faites. De cette façon, vous pouvez échanger le moteur de mise en cache sans modifier votre code.

lo_fye
la source
SENSATIONNEL. Si j'avais connu le statut officiel d'APC, j'aurais opté pour le retour à long terme ... :-) Je ne savais pas grand-chose non plus sur la différence de cache opcode / non-opcode. Par choix personnel, je ne souhaite pas créer de classes wrapper ni modifier le source de mes applications pour les aider à s’adapter à la mise en cache d’env.
rahul286
6
Notez que, depuis que PHP 5.5 a intégré Zend Opcache en tant que cache opcode "officiel", je pense qu'il est peu probable qu'ils basculent vers APC pour PHP 6.
Matteo Tassinari
1
Pour corriger cela: PHP 5.5 est en effet livré avec Zend Opcache. Il n'y aura pas de PHP 6. Il y aura un PHP 7 à la place. APC doit être considéré comme presque (?) Obsolète.
Jisse Reitsma
6

Juste pour noter que les choses ont un peu changé et il semble qu'APC ne sera pas inclus dans PHP 6 core.

APC a un développement lent et il semble que ce ne sera jamais compatible avec PHP 5.5. Pour cette raison, on dirait que les gars de PHP vont définir l'extension de cache d'opcode Zend OPCache comme extension PHP CORE. Vous voulez en savoir plus ici http://wiki.php.net/rfc/optimizerplus .

Remarque importante: Zend OPCache ne possède pas de cache de données utilisateur comme APC. Par conséquent, si vous avez besoin d'un cache de données utilisateur, vous pouvez l'utiliser avec Memcache.

Nemke
la source
1
Cela invalide également l'intégralité du cache lorsqu'il est rempli (les entrées non valides ne sont PAS supprimées). Par conséquent, si vous disposez de plus de code que de la mémoire ou que vous déployez fréquemment, attendez-vous à des pics de performances.
symcbean
3

Si vous utilisez la version PHP au moins 5.50, OpCache est votre meilleur choix (bibliothèque native PHP / PECL). Il devrait être pré-compilé si l'installation est à partir de binaire.

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

Si vous utilisez une version de PHP antérieure à la version 5.5, APC (cache OpCode natif PHP / PECL) serait le choix le plus simple, bien qu'il soit considéré comme non maintenu et mort:

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

L'utilisation de la fonctionnalité native OpCache de PHP devrait vous éviter des problèmes de maintenance des bibliothèques tierces.

récidive
la source
1
Si vous utilisez PHP <5.5, la première chose à faire est de le mettre à jour.
Michael Hampton
@ michael-hampton :: En effet! Mais dans de rares cas, vous ne pouvez pas mettre à jour PHP sans mettre à niveau le système d'exploitation, ce qui peut même impliquer une nouvelle configuration matérielle. Exemple - Je travaille pour une entreprise exécutant des serveurs IBM i-series, version 6somethings. Notre version de PHP est 5.4.3. Comme IBM s'appuie sur Zend pour le portage des versions de PHP, PHP 5.6 nécessite une version plus récente du système d'exploitation IBM-i - version 7.1 ou ultérieure (puis une version plus récente du serveur Zend PHP), qui nécessite de nouveaux serveurs Power-8, etc. ... meh
recurse
0

Memcache met en cache les paires clé / valeur, pas les opcodes. Vous pouvez l'utiliser conjointement avec l'un des caches d'opcode.

utilisateur10699
la source
D'après la réponse de SirStan (ci-dessous), il semble que Memcache ait besoin de moi pour modifier mes applications PHP. En fait, j'utilise Wordpress et modifier son code principal ne sera pas une bonne idée.
rahul286