Qu’est ce que le cache ?

I. Présentation

Dans ce billet nous allons étudier un terme que l'on entend souvent dans le monde du  web et plus globalement de l'informatique : le cache. On entend en effet souvent des termes comme "vider le cache", "c'est dans le cache", etc ... Nous allons essayer ici de voir ce qu'est le cache et quel est son rôle.

Avant de décrire son fonctionnement, il est important de savoir qu'il est très souvent utilisé dans bon nombre de protocole et de technologie. Le but premier du cache est de rendre les échanges entre deux ou plusieurs machines plus rapides et d'éviter des traitements et des échanges qui peuvent paraître redondants, donc inutiles. Le terme "cacher" ou "mettre en cache" signifie en effet mettre dans un endroit proche une information que je pourrais être amené à réutiliser ou à redemander dans peu de temps.

Prenons un exemple de l'utilisation et de l'utilité du cache dans un échange web pour s'approprier plus facilement son fonctionnement global.

Note : Attention, comme je l'ai précisé plus tôt, le cache n'est pas quelque chose de propre au web et peut être utilisé dans un tas d'autres domaines.

Lorsqu'un client fait une requête HTTP à un site web pour récupérer une page web, le serveur ne renvoie pas la page web en un seul morceau que le client va lire. En réalité, le serveur envoie un code de base qui contient d'autres liens que le client va devoir aller chercher lorsqu'il les trouvera dans le code de base (HTML). On va trouver dans ce code HTML des indications comme "à cet endroit tu dois aller chercher l'image qui se trouve sur http://monsite/images/images0001" pour afficher des images ou encore des fichiers CSS qui aident à structurer et mettre en forme et en couleur une page HTML. Pour chaque indication de ce type trouvées, le client est obligé de refaire une requête supplémentaire avec le temps que cela demande.

Le cache va avoir pour effet (toujours dans le domaine du web) que le client, s'il visite un site web, va recevoir des indications du serveur lui disant qu'un élément comme une image ou fichier CSS peut être stocké en local sur ce client car c'est un objet qui n'est pas souvent modifié. Le client, s'il revisite une page utilisant les mêmes fichiers ou les mêmes images, va donc pouvoir aller stocker puis chercher ces images en local et non sur le serveur s'il doit les recharger. Le fait d'aller chercher un fichier en local plutôt que sur un serveur permet d'avoir une réponse plus rapide car cela génère moins de traitement.

Il est important de savoir que l'exemple donné ci-dessus expose ce qu'est le cache au niveau du navigateur web, il s'agit là d'une des manières dont peut fonctionner le cache mais il en existe beaucoup d'autres. Cependant, toutes reprennent le même principe : stocker une requête, un fichier, un objet ou un élément défini à un endroit pour qu'il soit plus vite fournis à l'utilisateur ou au service final. C'est le rôle principal du cache.

II. Cache client et Cache serveur

Globalement, on peut mettre en avant deux sortes de cache : le cache client et le cache serveur.

Comme leur nom l'indique, le premier est le fait de cacher un objet ou un fichier sur le client ou au plus près du client pour qu'il reprenne ces informations en cache la prochaine fois qu'il en aura besoin, on retrouve dans cette catégorie le cache ARP, DNS et web dont nous parlerons tout à l'heure.

La deuxième catégorie correspondant à des traitements coté serveur qui sont mis en cache après des requêtes. Bien souvent, les requêtes faites par les clients peuvent se ressembler, pour chaque requête, le serveur va effectuer un ensemble de traitement pour fournir une réponse (recherches, tris, listages, calculs ...). Le principe du cache serveur est que l'on va se souvenir d'une requête et mettre en cache sa réponse.

CACHE01
Ici, un premier client effectue une requête à un serveur, requête simplifiée ici car il peut s'agir de traitement simple (web, génération de page en PHP) ou plus complexe (recherche dans une grande base de données, etc.). Le serveur reçoit la requête, effectue les traitements et calculs nécessaires pour y répondre puis répond au client en mettant en cache cette réponse.

Cela va donc permettre d'éviter, pour une requête strictement identique, tous les calculs et recherches qui sont à faire. Pour une requête "combien font 1+5 ?", la réponse sera 6 pour le premier client. Si une seconde requête "combien font 1+5 ?" est faite au serveur, il répondra directement 6 sans chercher à ré-effectuer le calcul (si la première réponse a été mise en cache !). Cela permet donc de répondre plus rapidement au serveur et également de lui faire utiliser moins de ressources qu'il pourra alors utiliser pour d'autres traitements.

CACHE02
Ici, un second client effectue la même requête auprès du même serveur. Notre serveur ayant pris la précaution de mettre cette requête et sa réponse en cache n'aura pas besoin d'effectuer à nouveau les traitements nécessaires pour y répondre et ira chercher la réponse correspondante directement dans son cache avant de la renvoyer au client.

III. Des exemples d'utilisation du cache

Nous allons maintenant voir différents exemples de technologie ou de principe utilisant fréquemment la mise en cache, que ce soit au niveau serveur comme client (et parfois les deux) :

Cache DNS

Avant tout échange web, par exemple lorsque l'on visite un site web nommé http://monsite.fr, notre ordinateur va effectuer une requête DNS pour traduire monsite.fr en une adresse IP. C'est un comportement qui est systématique pour chaque page web et chaque site web. Il est donc logique qu'un cache soit mis en place à cet endroit. En effet, il existe sur tous les systèmes d'exploitation et également sur les navigateurs des caches DNS qui ont pour fonction de mettre en cache les correspondances nom de main <-> IP (monsite.fr <-> 159.254.x.xx). Cela permet, lorsque l'on visitera à nouveau ce site web, de ne pas avoir à ré-effectuer une requête DNS et ainsi d'y accéder plus rapidement car l'information en cache sera obtenue plus rapidement qu'en la demandant à un serveur DNS sur le web.

Cache des serveurs proxy

Les serveurs proxy, qui sont des intermédiaires entre des clients et des serveurs (que ce soit entre le réseau local et Internet ou entre deux endroits d'Internet) font également souvent de la mise en cache pour rendre l'accès à l'information par les clients plus rapide. L'avantage est que la mise en cache est alors centralisée sur un même point et peut alors être utilisée par plusieurs clients effectuant la même requête.

Cache navigateur

Les navigateurs web, comme nous l'avons vu plus haut en introduction, utilisent fréquemment la mise en cache en ce qui concerne les script javascript, les fichiers de style CSS ou les images d'un site web. L'administrateur d'un site web peut d'ailleurs spécifier des paramètres à destination des clients leur indiquant combien de temps ils peuvent garder tel ou tel type de fichier en cache. Cela permet  d'avoir une mise en cache temporaire mais qui procure un gain de performance et une économie des ressources pour le client comme pour le serveur.

Cache de page dynamique

Coté serveur web, un cache peut également être mis en place pour ne pas avoir à régénérer des pages qui sont normalement générée dynamiquement comme c'est le cas de la plupart des sites web aujourd'hui. L'utilisation de PHP et de langages du même type permettent une modularité des sites web mais génèrent également des consommations de ressources très importantes puisque les pages sont générées à chaque requête pour être construites puis envoyées au client. Heureusement la mise en cache permet d'éviter, pour une même page demandée contenant les mêmes informations, de régénérer une page mais plutôt de rendre une page déjà calculée mise en cache aux clients. Certains outils peuvent se positionner directement sur le serveur web et d'autres, plus conséquent et utilisés pour des gros trafics, se positionnent en amont du ou des serveurs web. Ils agissent alors également comme des reverse-proxy, c'est par exemple le cas de Varnish.

Cache de requête de base de données

A nouveau au niveau des serveurs web, ceux-ci utilisent quasi constamment des bases de données pour ordonnancer et trier leurs informations. Chaque génération de page entraîne une recherche de contenu dans la base de données. Il est donc souvent utile de mettre en cache les réponses fournies par la base de données afin de rendre plus rapide la génération des pages. C'est par exemple ce que fait le plugin DB-Cache Reloaded de WordPress.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 526.Voir tous les posts

One thought on “Qu’est ce que le cache ?

  • Merci beaucoup, vos explications sont très claires.

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.