Un système de cache ou « caching system » améliore dans certaines conditions la performance des applications web. Son rôle est de retourner à l’application des éléments (objets php, requêtes SQL, pages HTML, Bloc de contenu dynamique …) déjà calculés ou précompilés. Cela évite de refaire le travail à chaque itération. La mise en place d’une gestion optimisée du système de cache améliore de manière significative les performances de vos applications !

Dans les faits, on décide de mettre en place un système de cache lorsque l’application web rencontre des difficultés dues aux fortes sollicitations de ses utilisateurs. Implémenter ou choisir une solution de « caching », ne peut pas s’improviser et être dicté par l’urgence. Dans la plupart des cas, l’augmentation des capacités du serveur suffit à résoudre temporairement le problème. La situation d’interruption de service pouvant se reproduire, il est important d’analyser le code de l’application afin de trouver des pistes d’optimisations et de voir comment un système de cache peut être intégré.
Nous pouvons classer en trois catégories les systèmes de cache :

  • les caches scripts : le mécanisme de cache est écrit dans un langage de programmation (PHP par exemple). Nous y distinguons les systèmes de cache fichiers et mémoires. Les caches mémoires font appel à des services tiers qui ne peuvent être installés que sur des hébergements dédiés (Memcache ; Redis ; APC ; HEAP etc..). Quant au système de cache fichier, il va enregistrer les éléments à cacher sur le disque du serveur,
  • Les caches d’opcode (APC ; eAccelerator ; Xcache): L’opcode est un code intermédiaire issu de l’analyse du programme écrit par le développeur (c’est la cas avec PHP). Le résultat de cette interprétation est mis en mémoire. Certains caches d’opcode comme APC permettent d’être utilisés coté script,
  • Les caches proxy-cache (SQUID ; VARNISH): ce sont des services systèmes qui se retrouvent en première ligne au sein d’architectures complexes.

Nous passerons en revue l’ensemble des mécanismes de cache afin de montrer les gains de performance. Comme toujours, la solution d’hébergement aura un impact direct sur le choix du système de cache à mettre en oeuvre.

Pour mesurer les améliorations, nous utiliserons Apache Benchmark (AB). C’est un outil très simple mais suffisant pour appuyer nos dires. Pour des benchmarks plus affinés dans une stratégie d’optimisation globale, il est conseillé d’utiliser conjointement les outils suivants :

  • « profiling » avec « Xdebug » ou « Xhprof » : optimisation et simplification du code de l’application en vue d’améliorer sa vitesse d’exécution,
  • audit et optimisation du schéma de base de données (normalisation ; dénormalisation ; structure des champs ; analyse de la pertinence des index ; analyse des requêtes lentes avec EXPLAIN),
  • simulations de visites : simuler avec selenium une montée en charge avec des navigations complexes de vos visiteurs,
  • intégration xhtml / css / js : optimiser le chargement des interfaces et utiliser un CDN.

Pour répondre à la question «quel système de cache me faut-il ?», je vous propose la démarche suivante :

3 réflexions au sujet de « Les systèmes de cache pour améliorer les performances de vos applications web »

  1. Bonjour,
    Merci pour cette introduction sur les systèmes de cache ainsi que le billet sur les caches fichiers. Par contre vous ne développez pas sur les caches OpCode ou encore les caches mémoires comme memcache….

  2. Bonjour Eric,
    Merci de votre commentaire. Je prépare un billet qui va traiter d’APC, de memcache et de Varnish. l’idée est de présenter ces solutions de caches avancés tout en aidant le lecteur à se poser les bonnes questions sur le choix de la solution à mettre en place en fonction de ses contraintes techniques (Plateforme ; Road Map ; Code ; Pic de fréquentation etc …)

    Stéphane

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>