TUTORIELS 
PHP et les systèmes de caches
(Fourni par Direction|PHP)

Page 1 | 2 | 3 | 4

L'essentiel sur les différents systèmes, et une mise en application du caching avec PEAR/Cache_Lite
 (Janvier 2004)
 
* A LIRE Les solutions de caching en PHP4
* Le caching pour accélérer et alléger le réseau
(JDNet Solutions)
Si votre site est particulièrement fréquenté, si la base SQL de votre hébergeur est particulièrement lente, si certaines de vos pages sont particulièrement gourmandes ou encore si votre serveur web n'est qu'une vieille machine poussive de récupération, vous avez probablement besoin d'un solide système de cache pour votre PHP.

Les systèmes de cache applicable au PHP sont nombreux et répondent tous à des problématiques plus ou moins différentes. Principalement, on distingue :
- les caches systèmes (proxy-cache inverse...) ;
- les caches d'opcode ;
- les caches côté script.

Les différents types de caches
Les caches systèmes
Ce type de cache n'est pas forcément lié à PHP. En effet, le cache est, dans ce cas, situé en amont du langage de script, donc plus au niveau d'Apache que de PHP.

Entre le client et le serveur web, on intercale une machine avec un serveur Apache (par exemple Squid) monté en proxy-cache inverse. Tous les visiteurs interrogeront systématiquement cette machine et jamais le serveur web directement.

Lorsqu'une requête arrive au niveau du proxy-cache inverse, la machine regarde en premier lieu si le résultat de cette requête n'est pas dans son cache. S'il l'est, le résultat est directement renvoyé au client sans du tout solliciter le serveur web. Ainsi, PHP n'est jamais intervenu ! Par contre, si le résultat de la requête n'est pas disponible dans le cache, la requête est alors renvoyée au serveur web qui transmet le résultat au proxy-cache inverse. Ce dernier sauvegarde le résultat dans son cache et le transmet au client.

Cette méthode permet donc :
- de ne pas avoir à modifier ses pages pour bénéficier du cache ;
- des gains énormes en termes de vitesse : si la page est disponible dans le cache, on traite en fait des pages statiques ;
- d'introduire une répartition de charge ou une haute disponibilité en plaçant plusieurs serveurs web derrière le proxy-cache inverse.

Cependant :
- c'est une solution lourde et structurelle. Elle impose de repenser toute l'architecture web : elle n'est donc pas accessible en hébergement mutualisé et rarement en hébergement dédié;
- elle nécessite au moins deux machines, ce qui peut-être éliminatoire si vous êtes votre propre hébergeur.

C'est une solution redoutable, mais elle est n'est quasiment applicable que dans le contexte d'une entreprise qui est son propre hébergeur.

Les caches d'opcode
Les caches d'opcode se chargent de garder en mémoire l'opcode généré par PHP. L'opcode est en fait une sorte d'intermédiaire entre le script et l'exécutable. En effet, avant de lancer l'exécution à proprement parler, PHP transforme votre script en opcode.
Le principe de ces systèmes de cache est de mémoriser cet opcode. Ainsi à chaque nouvelle exécution de votre script, on économise la coûteuse transformation du script en opcode.
Ce type de cache nécessite donc une modification interne de PHP. Vous devrez être administrateur de la machine sur laquelle vous l'installez.
Les avantages principaux sont les suivants :
- aucun besoin de modifier vos pages pour bénéficier de ce système de cache ;
- une accélération notable des temps d'exécution des scripts.

D'un autre côté, les caches d'opcode nécessitent :
- une modification interne de PHP : pour certains, cela entraîne des difficultés lors des mises à jours;
- les droits d'administrateur de la machine : cette solution n'est donc pas envisageable sur un hébergement mutualisé ;

Les caches d'opcode sont une solution efficace mais elle n'est utilisable que dans le contexte d'un hébergement dédié.

Sans avoir la prétention d'être exhaustif, on peut citer :

The ionCube PHP Accelerator
Vous le trouverez à l'adresse http://www.php-accelerator.co.uk. Il s'agit donc d'un cache d'opcode doublé d'un optimiseur de code. Il donne d'excellents résultats, et tout particulièrement avec le système de template Smarty (http://smarty.php.net). De plus, ionCube PHP accelerator est gratuit. Son principal inconvénient, c'est qu'il n'est ni libre, ni open source si bien que l'on a aucune garantie sur la pérennité et la gratuité de ce programme .

Zend Accelerator
C'est le premier (historiquement) et le plus performant des caches d'opcode. Edité par Zend Technologies, vous le trouverez bien sûr sur http://www.zend.com. L'implication de cette société dans le PHP garantit une bonne pérennité du produit vis-à-vis des évolutions du PHP. Le seul inconvénient c'est qu'il n'est pas gratuit. Les versions disponibles commencent à partir de 490 dollars américains.

Turck MMCache for PHP
C'est un projet libre disponible à l'adresse http://turck-mmcache.sourceforge.net. C'est un cache d'opcode doublé d'un optimiseur de code et d'un encodeur. L'encodeur vous permet de diffuser un script PHP sans en donner le source. Activement développé et maintenu, il commence à donner d'excellents résultats (équivalents à Zend Accelerator dans certains cas).

Les caches cotés script
C'est un peu la solution du pauvre. Pour utiliser ce type de cache, il convient de modifier chacune des pages. On intègre quelques lignes de PHP qui font le plus souvent appel à une classe externe. Cette dernière vérifie si la page demandée est dans le cache, généralement matéralisé par des fichiers. Si oui le fichier en cache est retourné et l'exécution du script s'arrête. Si la page n'est pas dans le cache, l'exécution de la page originale continue et son résultat est capturé pour mise en cache.
Les avantages de ce type de solution sont les suivants :
- possibilité de mise en oeuvre simple, même sur un hébergement mutualisé;
- les gains en vitesse peuvent être très importants ;
- on peut bénéficier d'une très grande souplesse avec certains outils : par exemple, cacher uniquement plusieurs parties d'une page....

Cependant :
- chaque page doit être légèrement modifiée ;
- PHP est exécuté systématiquement, même si ce n'est que pour retourner le contenu d'un fichier du cache et donc les performances ne seront pas aussi bonnes que dans le cas d'un proxy-cache inverse.

Forums
* Discutez en sur les forums

Les caches coté script sont quasiment applicables sur tout type d'hébergement. C'est une solution assez facile à mettre en place, qui offre d'excellents résultats et une grande souplesse. Il faut cependant légèrement modifier chaque page pour l'utiliser.

Dans la mesure c'est la solution applicable pour le plus grand nombre d'entre vous, nous allons approfondir ce type de cache et sa mise en place dans la suite de cet article.

Page 1 | 2 | 3 | 4


 
[ Fabien MartyDirection|PHP pour JDNet
 
Accueil | Haut de page