Qu’est-ce qu’un cache ?

Le terme cache désigne un système de mémoire intermédiaire numérique qui conserve les données consultées en vue d’un accès ultérieur. Lors des consultations suivantes, c’est le cache qui répond aux requêtes et il n’est alors pas nécessaire de contacter l’application d’origine. Les serveurs Web en sont un bon exemple : ils disposent de leur propre cache, qui peut enregistrer temporairement le contenu d’un site Web. Si ce site Web est consulté à nouveau ultérieurement, il peut être chargé plus rapidement, car les données sont stockées dans le cache et le serveur n’a pas besoin d’envoyer une requête.

Définition

Cache : un cache est une mémoire intermédiaire qui enregistre les données en vue d’un accès ultérieur. Il permet de réduire le temps d’accès à ces données. Le cache est une couche invisible entre l’utilisateur et la source des données. Le processus d’enregistrement des données dans le cache s’appelle le « Caching » ou la « Mise en cache ».

Pour rendre le principe de cache plus compréhensible, utilisons un exemple médical.

Imaginez un traitement dentaire ou une intervention chirurgicale. Le médecin demande à son assistant une ressource : un scalpel, un désinfectant ou encore des pansements par exemple. Si les ressources sont déjà prêtes, l’assistant peut réagir immédiatement et les porter au médecin. Sinon, l’assistant doit localiser la ressource demandée dans l’armoire à pharmacie et la porter ensuite au médecin. Après utilisation par le médecin, la ressource est gardée à portée de main par l’assistant pour un accès ultérieur rapide.

Dans leur utilisation, les ressources individuelles ne sont pas complètement indépendantes les unes des autres : si le médecin a besoin d’un désinfectant, il aura probablement besoin aussi d’une compresse, et une aiguille n’est d’aucune utilité sans fil. L’assistant préparera en amont les ressources utilisées ensemble afin de minimiser le temps d’accès aux ressources.

Comme vous pouvez le constater, la mise à disposition des ressources qui sont souvent utilisées est un procédé très utile au quotidien. Dans le monde numérique, ces processus connexes sont regroupés sous le terme de « mise en cache ».

Quel est l’objectif d’un cache ?

L’objectif premier d’un cache est de réduire le temps d’accès aux données importantes. Les données importantes sont :

  1. Les données utilisées souvent : dans ce cas, il serait inefficace de recharger à plusieurs reprises les données à partir de la mémoire plus lente située derrière le cache. À la place, les données sont livrées plus rapidement à partir du cache.
  2. Des données générées par des processus complexes : certaines données sont le résultat d’un traitement complexe ou bien les données doivent être assemblées à partir de différents composites. Dans ce cas, il est conseillé de stocker les données finales dans une mémoire cache pour les recherches ultérieures.
  3. Des données qui sont nécessaires ensemble : dans ce cas, il serait inefficace de ne charger les données que lorsqu’elles sont requises. Il est plus logique de conserver les données ensemble dans le cache.

Comment fonctionne une mémoire cache ?

Revenons maintenant sur le fonctionnement concret du cache. Nous allons notamment aborder la question de comment fonctionne une mémoire intermédiaire et où elle se situe.

Schéma de base d’un cache

  1. Une requête d’accès à une ressource est adressée au système ou au logiciel qui dispose d’un cache.
  2. Si cette ressource est déjà dans le cache, c’est le cache qui fournit la ressource. Dans ce cas, on parle de « Cache Hit » ou « Succès de cache ».
  3. Si la ressource n’est pas dans le cache, elle est d’abord téléchargée du système où elle se trouve dans la mémoire intermédiaire, puis livrée au client. Dans ce cas, on parle de « Cache Miss » ou « Défaut de cache ».
  4. Si cette même ressource est à nouveau requise par la suite, elle peut être livrée par le cache, c’est donc un « Cache Hit ».

L’image illustre le fonctionnement de base : un client envoie une requête à un serveur (1) pour accéder à une ressource. Dans le cas d’un « Cache Hit », la ressource se trouve déjà dans le cache et est livrée immédiatement au client (2). Dans le cas d’un « Cache Miss », la ressource demandée n’est pas dans le cache et est donc requise auprès d’un serveur (ici une base de données) (2). Dès que la ressource est disponible (3), elle est livrée au client (4) et stockée dans le cache en vue d’une utilisation ultérieure.

Où se trouve le cache ?

La caractéristique principale du cache, c’est qu’il est caché. Ce fait se reflète dans l’origine du mot : le mot « cache » vient du français, du verbe cacher.

Le cache est invisible pour l’utilisateur et se trouve juste avant la mémoire de données. Cela signifie que l’utilisateur n’a pas besoin de connaître les propriétés du cache. L’utilisateur envoie une requête au support de données et ne remarque pas que c’est le cache qui fournit les ressources.

Combien y a-t-il de caches dans une configuration standard ?

En général, plusieurs caches sont actifs dans un système numérique.

Prenons l’accès à un site Web : le navigateur communique avec un serveur et envoie une requête pour une série de ressources. Tant que le contenu de la page n’est pas affiché dans votre navigateur, les composants de la page passent généralement par les caches suivants : cache du processeur, cache du système, cache du navigateur sur l’appareil ainsi que le CDN (Content Delivery Network) et le cache Web sur le site du serveur.

Avantages et inconvénients du cache

Le fait qu’une application soit équipée ou non d’un cache est en principe à la discrétion du développeur. Voici une compilation des avantages et inconvénients d’une solution de mémoire intermédiaire.

Avantage : amélioration considérable de la vitesse

L’utilisation d’un cache compte parmi ses avantages potentiels l’augmentation considérable de la vitesse. Une accélération par cent est fréquente. L’accélération n’est effective que pour la consultation répétée de données. Le gain réel variera donc beaucoup en fonction des situations et des applications.

Avantage : réduction de la charge du système derrière le cache

Dans la mesure où un cache permet de réduire fortement le temps de chargement, la charge sur le système est considérablement réduite.

Prenez par exemple une page HTML dynamique générée à partir d’un modèle PHP : on accède à une base de données pour générer la page. Cet accès est relativement gourmand en termes de ressources. En outre, il n’est pas rare de calibrer les serveurs de bases de données, c’est pourquoi l’accès aux bases de données en tant que « goulot d’étranglement » peut limiter le débit global du système. Dans ce cas, il est avantageux de stocker la page HTML générée dans un cache Web afin d’utiliser la capacité du serveur de base de données pour d’autres tâches.

Inconvénient : invalider le cache est une tâche difficile

Citation

« There are only two hard things in Computer Science: cache invalidation and naming things. »
(« Il n’y a que deux choses difficiles en informatique : l’invalidation du cache et le nommage. »)

Phil Karlton, https://www.martinfowler.com/bliki/TwoHardThings.html

Le terme invalidation du cache fait référence à la décision de savoir quand les données mises en cache ne sont plus actuelles et doivent être mises à jour. Reprenons l’exemple médical ci-dessus : l’assistant agit comme un cache pour le médecin en mettant à disposition les ressources déjà utilisées en vue d’un usage ultérieur. Comme il n’y a que peu de place sur l’étagère, l’assistant du médecin range continuellement pendant le traitement. Les ressources utilisées doivent être jetées et remplacées. Il peut également arriver que l’assistant retire une ressource dont le médecin aura de nouveau besoin. Ce cas peut être considéré comme un « Cache Miss ». L’assistant doit alors localiser la ressource demandée.

Comme un « Cache Miss » est coûteux, la stratégie optimale de mise en cache vise à l’éviter autant que possible. Il peut aussi arriver que les données du cache ne soient plus à jour. Ce problème peut encore être accentué lorsque plusieurs caches hiérarchiquement adjacents sont actifs. Il peut être difficile de déterminer quand les données du cache ne sont plus à jour.

Si un cache fournit des données qui ne sont plus à jour, cela entraîne généralement des problèmes divers du côté de l’utilisateur : le site Web visité présente des erreurs d’affichage ou des fragments du passé apparaissent lors de la récupération des données. Il peut être difficile de localiser le problème et dans ce cas, vider le cache est souvent la meilleure solution.

Quels sont les différents types de caches ?

Les caches sont constitués de composants hardware et software. Un cache hardware est une mémoire intermédiaire rapide qui réduit les temps d’accès à la mémoire de données se trouvant derrière. En principe, les caches hardware sont toujours très petits par rapport à la taille totale des caches.

En revanche, les caches implémentés dans les logiciels (software) peuvent même dépasser la taille de la ressource devant laquelle ils se trouvent. C’est particulièrement vrai si plusieurs versions d’une ressource se trouvent dans le cache.

Voici un aperçu des ressources généralement dotées d’un cache. La taille de la mémoire cache, le temps d’accès à la mémoire cache et une indication de la vitesse d’accès à la ressource en l’absence de mémoire cache sont affichés.

Ressource Cache Taille du cache Temps d’accès avec le cache x plus lent sans le cache
Stockage principal Cache de niveau 1 (hardware) Des dizaines de Kilo-Octets (Ko) Moins d’une nanoseconde (ns) 200 ×
Disque dur Cache du disque dur (hardware) Des dizaines de Méga-Octets (Mo) Centaines de nanosecondes 100 ×
Navigateur Cache de navigateur (software) Plusieurs Giga-Octets (Go) Dizaines de millisecondes (ms) 10–100 ×
Sites Web CDN, Google Page Cache, Wayback Machine (Software) Milliers de Téraoctets (Pétaoctets, Po) Quelques secondes 2-5 ×

Caches hardware

Cache du processeur

Les processeurs modernes sont incroyablement rapides. Les processus des puces ne prennent que des fractions de nanosecondes, autrement dit un milliardième de seconde. En revanche, l’accès à la mémoire principale est relativement lent et nécessite des centaines de nanosecondes. C’est pour cette raison que les processeurs modernes disposent d’une hiérarchie de caches.

Un « Cache hit » sur le cache processeur le plus rapide, également appelé le « Cache de niveau 1 » ou « L1 Cache » est 200 fois plus rapide qu’un accès à la mémoire principale.

Cache du disque dur

La rotation d’un disque dur se compte en plusieurs milliers de rotations par minute. La tête de lecture glisse sur le disque et lit des données séquentielles. Dans la mesure où il s’agit d’un processus physique, l’accès à un disque dur est relativement lent.

C’est pour cette raison que chaque disque dur possède son propre petit cache. Ainsi, les données les plus fréquemment utilisées, notamment celles du système d’exploitation, ne doivent plus être lues sur le disque dur.

Le cache du disque dur permet de charger les données importantes environ 100 fois plus vite. Elles sont donc « immédiatement » disponibles pour l’utilisateur.

Caches software

Cache du navigateur

Lors de la visite d’un site Web, de nombreuses données sont stockées temporairement sur l’appareil de l’utilisateur. Outre le contenu proprement dit, cela comprend également diverses ressources telles que des images, des feuilles de style et des fichiers JavaScript. En général, la plupart de ces ressources sont nécessaires pour plusieurs pages. Pour accélérer le chargement des pages, il est avantageux de stocker ces ressources fréquemment utilisées dans le cache du navigateur de l’appareil local.

Aussi pratique que soit le cache du navigateur pour surfer sur le Web, il peut également causer des problèmes. Par exemple, si les développeurs ont modifié une ressource sur le site Web, mais que le cache du navigateur contient toujours l’ancienne version de la ressource, cela peut conduire à des erreurs d’affichage. Vider le cache du navigateur peut aider à résoudre ce problème.

Cache des pages Google

La fonction « Dans le cache » de Google permet de stocker les pages de nombreux sites Web. Cela signifie que les pages peuvent toujours être consultées, même si le site Web d’origine est hors ligne. L’état des pages correspond à la dernière indexation par le Googlebot.

Cache DNS

Le Domain Name System généralement appelé DNS, est un système mondial pour la traduction des domaines Internet en adresses IP (ou vice versa). Le DNS renvoie une adresse IP pour un nom de domaine. Par exemple, l’adresse IP du domaine ionos.de est 217.160.86.40.

Les requêtes au DNS ayant déjà reçu une réponse sont mises en cache localement sur l’appareil dans le cache du DNS. Cela signifie que chaque résolution est toujours aussi rapide.

Cependant, l’utilisation du cache DNS peut également engendrer des problèmes, par exemple lorsqu’un domaine a changé d’adresse IP dans le cas notamment d’un changement de serveur et que l’ancienne adresse est encore dans le cache DNS local. Dans ce cas, la connexion au serveur échouera. Vider le cache DNS peut résoudre le problème.

Content Delivery Network (CDN)

Les Content Delivery Networks (« Réseaux de diffusion de contenu » en français) sont des réseaux mondiaux qui conservent une grande partie des données des sites Web populaires sur des « edge nodes ». Ces nœuds de périphérie répliquent les données à la « périphérie » de l’Internet. Les nœuds sont situés localement à proximité de l’utilisateur et sont techniquement conçus pour fournir des données aussi rapidement que possible. Un CDN fonctionne comme un cache pour les données des sites Web stockés. Cela permet de réduire les temps d’accès, notamment aux offres de streaming et aux sites Web.

Cache Web

Un cache Web enregistre les documents Web, comme les pages HTML, les images, les feuilles de styles ou les fichiers JavaScript en vue d’une réutilisation. Les caches Web modernes comme Varnish et Redis stockent les données fréquemment utilisées dans la mémoire de travail et obtiennent ainsi des temps de réponse particulièrement courts.

Si les données sont à nouveau interrogées, le temps de réponse est particulièrement réduit. Cela permet de réduire considérablement les temps de réponse et de diminuer la charge des systèmes situés derrière le cache, tels que le serveur Web et la base de données. OPcache et l’alternative PHP Cache (APC) sont d’autres caches Web très utilisés.