Le terme cache désigne un système de mémoire in­ter­mé­diaire numérique qui conserve les données con­sul­tées en vue d’un accès ultérieur. Lors des con­sul­ta­tions suivantes, c’est le cache qui répond aux requêtes et il n’est alors pas né­ces­saire de contacter l’ap­pli­ca­tion d’origine. Les serveurs Web en sont un bon exemple : ils disposent de leur propre cache, qui peut en­re­gis­trer tem­po­rai­re­ment le contenu d’un site Web. Si ce site Web est consulté à nouveau ul­té­rieu­re­ment, il peut être chargé plus ra­pi­de­ment, car les données sont stockées dans le cache et le serveur n’a pas besoin d’envoyer une requête.

Dé­fi­ni­tion

Cache : un cache est une mémoire in­ter­mé­diaire qui en­re­gistre 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’uti­li­sa­teur et la source des données. Le processus d’en­re­gis­tre­ment des données dans le cache s’appelle le « Caching » ou la « Mise en cache ».

Pour rendre le principe de cache plus com­pré­hen­sible, utilisons un exemple médical.

Imaginez un trai­te­ment dentaire ou une in­ter­ven­tion chi­rur­gi­cale. Le médecin demande à son assistant une ressource : un scalpel, un dé­sin­fec­tant ou encore des pan­se­ments par exemple. Si les res­sources sont déjà prêtes, l’assistant peut réagir im­mé­dia­te­ment 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 uti­li­sa­tion 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 uti­li­sa­tion, les res­sources in­di­vi­duelles ne sont pas com­plè­te­ment in­dé­pen­dantes les unes des autres : si le médecin a besoin d’un dé­sin­fec­tant, il aura pro­ba­ble­ment besoin aussi d’une compresse, et une aiguille n’est d’aucune utilité sans fil. L’assistant préparera en amont les res­sources utilisées ensemble afin de minimiser le temps d’accès aux res­sources.

Comme vous pouvez le constater, la mise à dis­po­si­tion des res­sources 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 im­por­tantes. Les données im­por­tantes sont :

  1. Les données utilisées souvent : dans ce cas, il serait inef­fi­cace 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 ra­pi­de­ment à partir du cache.
  2. Des données générées par des processus complexes : certaines données sont le résultat d’un trai­te­ment complexe ou bien les données doivent être as­sem­blées à partir de dif­fé­rents com­po­sites. Dans ce cas, il est conseillé de stocker les données finales dans une mémoire cache pour les re­cherches ul­té­rieures.
  3. Des données qui sont né­ces­saires ensemble : dans ce cas, il serait inef­fi­cace 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 fonc­tionne une mémoire cache ?

Revenons main­te­nant sur le fonc­tion­ne­ment concret du cache. Nous allons notamment aborder la question de comment fonc­tionne une mémoire in­ter­mé­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é­char­gée du système où elle se trouve dans la mémoire in­ter­mé­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 fonc­tion­ne­ment 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 im­mé­dia­te­ment 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 dis­po­nible (3), elle est livrée au client (4) et stockée dans le cache en vue d’une uti­li­sa­tion ul­té­rieure.

Où se trouve le cache ?

La ca­rac­té­ris­tique prin­ci­pale 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’uti­li­sa­teur et se trouve juste avant la mémoire de données. Cela signifie que l’uti­li­sa­teur n’a pas besoin de connaître les pro­prié­tés du cache. L’uti­li­sa­teur envoie une requête au support de données et ne remarque pas que c’est le cache qui fournit les res­sources.

Combien y a-t-il de caches dans une con­fi­gu­ra­tion standard ?

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

Prenons l’accès à un site Web : le na­vi­ga­teur com­mu­nique avec un serveur et envoie une requête pour une série de res­sources. Tant que le contenu de la page n’est pas affiché dans votre na­vi­ga­teur, les com­po­sants de la page passent gé­né­ra­le­ment par les caches suivants : cache du pro­ces­seur, cache du système, cache du na­vi­ga­teur sur l’appareil ainsi que le CDN (Content Delivery Network) et le cache Web sur le site du serveur.

Avantages et in­con­vé­nients du cache

Le fait qu’une ap­pli­ca­tion soit équipée ou non d’un cache est en principe à la dis­cré­tion du dé­ve­lop­peur. Voici une com­pi­la­tion des avantages et in­con­vé­nients d’une solution de mémoire in­ter­mé­diaire.

Avantage : amé­lio­ra­tion con­si­dé­rable de la vitesse

L’uti­li­sa­tion d’un cache compte parmi ses avantages po­ten­tiels l’aug­men­ta­tion con­si­dé­rable de la vitesse. Une ac­cé­lé­ra­tion par cent est fréquente. L’ac­cé­lé­ra­tion n’est effective que pour la con­sul­ta­tion répétée de données. Le gain réel variera donc beaucoup en fonction des si­tua­tions et des ap­pli­ca­tions.

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 char­ge­ment, la charge sur le système est con­si­dé­ra­ble­ment 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 re­la­ti­ve­ment gourmand en termes de res­sources. 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’étran­gle­ment » peut limiter le débit global du système. Dans ce cas, il est avan­ta­geux 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.

In­con­vé­nient : invalider le cache est une tâche difficile

Citation

« There are only two hard things in Computer Science: cache in­va­li­da­tion and naming things. »
(« Il n’y a que deux choses dif­fi­ciles en in­for­ma­tique : l’in­va­li­da­tion du cache et le nommage. »)

Phil Karlton, https://www.mar­tin­fow­ler.com/bliki/Two­Hard­Things.html

Le terme in­va­li­da­tion 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 à dis­po­si­tion les res­sources 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 con­ti­nuel­le­ment pendant le trai­te­ment. Les res­sources utilisées doivent être jetées et rem­pla­cé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é­rar­chi­que­ment adjacents sont actifs. Il peut être difficile de dé­ter­mi­ner 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é­ra­le­ment des problèmes divers du côté de l’uti­li­sa­teur : le site Web visité présente des erreurs d’affichage ou des fragments du passé ap­pa­rais­sent lors de la ré­cu­pé­ra­tion 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 dif­fé­rents types de caches ?

Les caches sont cons­ti­tués de com­po­sants hardware et software. Un cache hardware est une mémoire in­ter­mé­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 im­plé­men­tés dans les logiciels (software) peuvent même dépasser la taille de la ressource devant laquelle ils se trouvent. C’est par­ti­cu­liè­re­ment vrai si plusieurs versions d’une ressource se trouvent dans le cache.

Voici un aperçu des res­sources gé­né­ra­le­ment dotées d’un cache. La taille de la mémoire cache, le temps d’accès à la mémoire cache et une in­di­ca­tion 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 na­no­se­conde (ns) 200 ×
Disque dur Cache du disque dur (hardware) Des dizaines de Méga-Octets (Mo) Centaines de na­no­se­condes 100 ×
Na­vi­ga­teur Cache de na­vi­ga­teur (software) Plusieurs Giga-Octets (Go) Dizaines de mil­li­se­condes (ms) 10–100 ×
Sites Web CDN, Google Page Cache, Wayback Machine (Software) Milliers de Té­raoc­tets (Pé­taoc­tets, Po) Quelques secondes 2-5 ×

Caches hardware

Cache du pro­ces­seur

Les pro­ces­seurs modernes sont in­croya­ble­ment rapides. Les processus des puces ne prennent que des fractions de na­no­se­condes, autrement dit un mil­liar­dième de seconde. En revanche, l’accès à la mémoire prin­ci­pale est re­la­ti­ve­ment lent et nécessite des centaines de na­no­se­condes. C’est pour cette raison que les pro­ces­seurs modernes disposent d’une hié­rar­chie de caches.

Un « Cache hit » sur le cache pro­ces­seur 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 prin­ci­pale.

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é­quen­tielles. Dans la mesure où il s’agit d’un processus physique, l’accès à un disque dur est re­la­ti­ve­ment lent.

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

Le cache du disque dur permet de charger les données im­por­tantes environ 100 fois plus vite. Elles sont donc « im­mé­dia­te­ment » dis­po­nibles pour l’uti­li­sa­teur.

Caches software

Cache du na­vi­ga­teur

Lors de la visite d’un site Web, de nom­breuses données sont stockées tem­po­rai­re­ment sur l’appareil de l’uti­li­sa­teur. Outre le contenu pro­pre­ment dit, cela comprend également diverses res­sources telles que des images, des feuilles de style et des fichiers Ja­vaS­cript. En général, la plupart de ces res­sources sont né­ces­saires pour plusieurs pages. Pour accélérer le char­ge­ment des pages, il est avan­ta­geux de stocker ces res­sources fré­quem­ment utilisées dans le cache du na­vi­ga­teur de l’appareil local.

Aussi pratique que soit le cache du na­vi­ga­teur pour surfer sur le Web, il peut également causer des problèmes. Par exemple, si les dé­ve­lop­peurs ont modifié une ressource sur le site Web, mais que le cache du na­vi­ga­teur contient toujours l’ancienne version de la ressource, cela peut conduire à des erreurs d’affichage. Vider le cache du na­vi­ga­teur 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 con­sul­tées, même si le site Web d’origine est hors ligne. L’état des pages cor­res­pond à la dernière in­dexa­tion par le Googlebot.

Cache DNS

Le Domain Name System gé­né­ra­le­ment appelé DNS, est un système mondial pour la tra­duc­tion 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 lo­ca­le­ment sur l’appareil dans le cache du DNS. Cela signifie que chaque ré­so­lu­tion est toujours aussi rapide.

Cependant, l’uti­li­sa­tion 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 chan­ge­ment 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 con­ser­vent une grande partie des données des sites Web po­pu­laires sur des « edge nodes ». Ces nœuds de pé­ri­phé­rie ré­pli­quent les données à la « pé­ri­phé­rie » de l’Internet. Les nœuds sont situés lo­ca­le­ment à proximité de l’uti­li­sa­teur et sont tech­ni­que­ment conçus pour fournir des données aussi ra­pi­de­ment que possible. Un CDN fonc­tionne 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 en­re­gistre les documents Web, comme les pages HTML, les images, les feuilles de styles ou les fichiers Ja­vaS­cript en vue d’une réu­ti­li­sa­tion. Les caches Web modernes comme Varnish et Redis stockent les données fré­quem­ment utilisées dans la mémoire de travail et ob­tien­nent ainsi des temps de réponse par­ti­cu­liè­re­ment courts.

Si les données sont à nouveau in­ter­ro­gées, le temps de réponse est par­ti­cu­liè­re­ment réduit. Cela permet de réduire con­si­dé­ra­ble­ment 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’al­ter­na­tive PHP Cache (APC) sont d’autres caches Web très utilisés.

Aller au menu principal