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.
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.
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