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.
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.
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.
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.
 
 
Aucun commentaire :
Enregistrer un commentaire