Tout ce que vous devez savoir sur la mise en cache



Bonne journée.

Je vous présente la traduction de l'article "Tout ce que vous devez savoir sur la mise en cache - Conception de systèmes" par Animesh Gaitonde.

introduction


Avez-vous remarqué que lorsque vous parcourez une page Web avec une mauvaise connexion Internet, du texte est chargé devant des images de haute qualité? Cependant, lorsque vous visitez à nouveau la même page, elle se charge beaucoup plus rapidement. Lorsque vous visitez un nouveau site, il faut beaucoup plus de temps pour le télécharger que pour télécharger des sites fréquemment visités tels que Facebook ou Amazon. Savez-vous pourquoi cela se produit? Il s'agit de mise en cache.



Voici à quoi ressemble ma page Instagram avec une connexion lente. Comme vous pouvez le voir, le texte s'affiche alors que les images n'ont pas encore été chargées.

Il est très important de fournir la meilleure expérience d'utilisation de l'application pour fidéliser et engager les utilisateurs. Dans un monde moderne où règne l'esprit de concurrence, les affaires souffrent grandement en raison de la mauvaise expérience utilisateur. Imaginez que vous regardez votre série ou vidéo en streaming préférée sur un site Web, mais la vidéo est constamment arrêtée pour un chargement supplémentaire (mise en mémoire tampon). Combien de temps durerez-vous une telle «attitude» et reviendrez-vous sur un tel site?

La mise en cache fonctionne sur le principe de la «localisation des liens». Le cache est un entrepôt de données local pour accélérer la récupération d'informations et la récupération de données. L'objectif principal du cache est de réduire le délai de lecture des données et d'augmenter le débit de l'application. Regardons quelques exemples réels.

Utilisation du cache


Supposons que vous prépariez le dîner tous les jours. Pour cuisiner, vous avez besoin de divers ingrédients, légumes, épices, etc. Cependant, allez-vous au magasin tous les jours pour cela? Cela peut être assez lourd et long. Bien sûr, la première chose que vous regardez dans le placard de la cuisine ou du réfrigérateur. Cela permet d'éviter un voyage inutile au supermarché.



Votre réfrigérateur est une sorte de cache pour les légumes. L'avantage évident de cette cache est une économie significative de temps de préparation du dîner.

Comment fonctionne le cache?


Les applications serveur stockent généralement les données dans une base de données. Lorsqu'un client demande des données, l'application envoie une demande à la base de données, en reçoit des données et les envoie au client. Le serveur de base de données est hors ligne et peut se trouver sur un ordinateur différent de celui sur lequel se trouve le serveur d'applications.



La lecture des données de la base de données est un processus très lent, car vous devez envoyer une demande et effectuer des E / S pour obtenir des données du système de fichiers. Si les données sont stockées dans le cache, l'opération de lecture sera très rapide. Lorsqu'un client demande à plusieurs reprises les mêmes données, il est judicieux de renvoyer les données du cache au lieu de la base de données.

Par exemple: si un tweet est viral, tous les clients demanderont des données pour le même tweet. Parce que Twitter compte des millions d'utilisateurs, l'utilisation d'un cache évite des millions de requêtes de base de données.

Ainsi, le cache réduit la charge sur la base de données. Si les données demandées sont dans le cache, la demande de base de données sera redirigée (interceptée). Vous pouvez faire une analogie avec une table de hachage qui stocke des paires clé-valeur.

Le diagramme suivant montre le processus de lecture des données du cache:



Concepts de cache clé


Temps de vivre (TTL)


Il s'agit de limites sur la quantité de données pouvant être stockées dans le cache. Vous devez supprimer les entrées du cache dont le serveur d'applications n'a plus besoin.

Dans le cas de Netflix, le serveur mettra en cache les émissions les plus vues ou les plus populaires. Il n'est pas nécessaire de mettre en cache les émissions que personne ne regarde.

Par exemple: la mise en cache de la série Paper House est plus rationnelle que le film Indiana Jones.

Supprimer la politique


À un moment donné, le cache est plein. D'où la nécessité de supprimer les anciennes données (non pertinentes) et de les remplacer par de nouvelles informations (pertinentes).

Il existe plusieurs stratégies pour vider le cache, telles que «ancien (le moins récemment utilisé)» (le moins récemment utilisé, LRU), «rarement demandé (le moins utilisé)» (le moins fréquemment utilisé, LFU), «dernier (le plus récemment utilisé)» ( Dernière utilisation, MRU). Ces politiques suppriment les données du cache selon un principe spécifique.

Vieux


Les données qui n'ont pas été demandées depuis longtemps sont supprimées du cache. Dès que le cache est plein, les anciennes données sont supprimées, de nouvelles données sont ajoutées.

Supposons que Facebook cache des photos de célébrités. L'analyse des demandes des abonnés indique la pertinence des nouvelles photos. Lorsque le cache est plein, la photo la plus ancienne en sera supprimée.

Rarement demandé


Le LFU suit la fréquence ou le nombre de demandes de données. Lorsque la taille du cache approche de la valeur seuil, les données les plus rarement demandées seront supprimées.

Lorsque nous entrons le texte, le téléphone commence à offrir diverses options pour terminer le mot, dont l'une peut être sélectionnée à la place de l'ensemble complet (saisie semi-automatique). Le logiciel du smartphone met en cache les mots les plus fréquemment saisis.



Les mots rarement tapés sont ensuite supprimés de ce cache. Dans l'exemple ci-dessus, si vous utilisez les mots «fonctionnalité», «fonctionnalités», «plume», etc., après un certain temps, le téléphone cessera de vous proposer «feat», car il sera supprimé du cache.

Dernier


Dans cette politique, les dernières données sont sujettes à suppression, la préférence est donnée aux anciennes données stockées dans le cache. Cette stratégie est utilisée si le modèle d'acquisition de données est tel que l'utilisateur est le moins intéressé à récupérer les dernières données. Prenons un exemple.



Les applications de rencontres telles que Tinder mettent généralement en cache tous les partenaires potentiels (correspondances ou préférences potentielles) de l'utilisateur. Lorsqu'un utilisateur parcourt un flux en déplaçant un profil spécifique d'un partenaire potentiel vers la gauche ou la droite, l'application ne devrait plus lui recommander ce profil. Si cela se produit, cela entraînera une mauvaise expérience utilisateur.

Dans ce cas, il est nécessaire de supprimer les dernières données. L'application doit supprimer les profils affichés dans le cache.

Types de cache


Enregistrement en cache


Comme son nom l'indique, les données sont écrites d'abord dans le cache, puis dans la base de données. Cela garantit la cohérence des données dans le cache et la base de données. Chaque lecture de données du cache correspond à l'enregistrement le plus récent.



L'inconvénient de cette approche est l'augmentation du temps d'enregistrement. Il ne convient pas aux systèmes fortement chargés avec des opérations d'écriture de données fréquentes. Cependant, il est idéal pour les applications qui relisent souvent les données stockées dans la base de données. Une écriture lente est compensée par une lecture et une cohérence rapides.

Entrée de cache


Une alternative à la première approche consiste à écrire des données dans le cache et à ajouter une note sur les modifications de données pour leur mise à jour ultérieure dans la base de données.



À l'aide d'opérations asynchrones périodiques, vous pouvez lire les données mises à jour dans le cache et apporter des modifications aux données correspondantes dans la base de données. Cette approche n'augmente pas les opérations de lecture / écriture. Le seul inconvénient ici est le retard de synchronisation entre le cache et la base de données. Cela peut conduire au fait que les applications qui s'appuient sur la base de données comme source de vérité liront des données obsolètes.

Youtube, par exemple, utilise cette approche pour stocker des informations sur le nombre de vues d'une vidéo particulière. La mise à jour de la base de données pour chaque vue de la vidéo virale sera très coûteuse. La meilleure solution consiste à écrire des données dans le cache, puis à les synchroniser avec la base de données.

Enregistrement de contournement du cache


Plusieurs applications serveur ne relisent pas souvent les dernières données. Dans ce cas, une entrée de contournement de cache est utilisée.



Dans cette approche, la base de données est mise à jour sans cache. Cela évite de charger des données non réclamées dans le cache. Cependant, si l'application demande toujours les dernières données qui ne sont pas dans le cache, cela entraînera le chargement de ces données à partir de la base de données avec toutes les conséquences qui en découlent.

Exemples d'utilisation du cache distribué


Liste des projets de cache ouvert:

  • Redis
  • Memcached
  • Voltdb
  • Aerospike dbs
  • Apache s'enflammer

Merci de votre attention.

All Articles