paint-brush
Comment améliorer l'expérience utilisateur et réduire les coûts : voici pourquoi vous devriez utiliser la mise en cachepar@brilianfird
791 lectures
791 lectures

Comment améliorer l'expérience utilisateur et réduire les coûts : voici pourquoi vous devriez utiliser la mise en cache

par Brilian Firdaus8m2024/05/10
Read on Terminal Reader

Trop long; Pour lire

Aujourd'hui, nous plongeons dans le monde du cache. La mise en cache est une arme secrète pour créer des systèmes évolutifs et performants. Il existe de nombreux types de mise en cache, mais dans cet article, nous nous concentrerons sur la mise en cache des objets backend (mise en cache backend). Le maîtriser vous aidera à créer des logiciels performants et fiables.
featured image - Comment améliorer l'expérience utilisateur et réduire les coûts : voici pourquoi vous devriez utiliser la mise en cache
Brilian Firdaus HackerNoon profile picture
0-item

Aujourd'hui, nous plongeons dans le monde du cache. La mise en cache est une arme secrète pour créer des systèmes évolutifs et performants. Il existe de nombreux types de mise en cache, mais dans cet article, nous nous concentrerons sur la mise en cache des objets backend (mise en cache backend). Le maîtriser vous aidera à créer des logiciels performants et fiables.


Dans cet article, nous explorerons :

  1. Qu’est-ce que la mise en cache ? Nous explorerons la mise en cache et expliquerons comment elle stocke temporairement les données pour un accès plus rapide.


  2. Avantages de la mise en cache : découvrez comment la mise en cache augmente la vitesse, réduit la charge du serveur, améliore l'expérience utilisateur et peut même réduire les coûts.


  3. Modèle de mise en cache : dans cette section, nous aborderons différentes manières d'utiliser le cache. N'oubliez pas qu'il y a des avantages et des inconvénients à chaque approche, alors assurez-vous de choisir le modèle adapté à vos besoins !


  4. Meilleure pratique de mise en cache : vous savez désormais comment stocker et récupérer les données mises en cache. Mais comment garantir que vos données mises en cache restent à jour ? Et que se passe-t-il lorsque le cache atteint sa capacité ?


  5. Quand ne pas mettre en cache : Bien que la mise en cache offre de nombreux avantages, il est parfois préférable de l'éviter. La mise en œuvre de la mise en cache dans un mauvais système peut augmenter la complexité et potentiellement même ralentir les performances.

Qu’est-ce que la mise en cache ?

Créer une application performante et évolutive consiste à éliminer les goulots d'étranglement et à rendre le système plus efficace. Les bases de données entravent souvent les performances du système en raison de leurs exigences de stockage et de traitement. Cela en fait un élément coûteux car ils doivent être souvent étendus.


Heureusement, il existe un composant qui peut aider à alléger l'utilisation des ressources de la base de données tout en améliorant la vitesse de récupération des données : ce composant est appelé cache .


Le cache est un stockage temporaire conçu pour une écriture et une lecture rapides des données. Il utilise un stockage mémoire à faible latence et des structures de données optimisées pour des opérations rapides. Il y a de fortes chances que vous ayez déjà utilisé Redis ou Memcached, ou au moins entendu leurs noms. Ce sont deux des systèmes de mise en cache distribués les plus populaires pour les services backend. Redis peut même faire office de base de données principale, mais c'est un sujet pour un autre article !

Avantages de la mise en cache

Le principal avantage de la mise en cache est sa rapidité. La lecture de données depuis un cache est nettement plus rapide que leur récupération depuis une base de données (comme SQL ou Mongo). Cette vitesse provient des caches utilisant des structures de données de dictionnaire (ou HashMap) pour des opérations rapides et stockant les données dans une mémoire à haute vitesse plutôt que sur disque.


Deuxièmement, la mise en cache réduit la charge sur votre base de données. Cela permet aux applications d'obtenir les données dont elles ont besoin à partir du cache au lieu d'accéder constamment à la base de données. Cela réduit considérablement l'utilisation des ressources matérielles ; au lieu de rechercher des données sur le disque, votre système y accède simplement à partir d'une mémoire rapide.


Ces avantages améliorent directement l’expérience utilisateur et peuvent conduire à des économies. Votre application répond beaucoup plus rapidement, créant ainsi une expérience plus fluide et plus satisfaisante pour les utilisateurs.


La mise en cache réduit les coûts d’infrastructure. Même si un système distribué comme Redis nécessite ses propres ressources, les économies globales sont souvent importantes. Votre application accède aux données plus efficacement, ce qui vous permet potentiellement de réduire la taille de votre base de données. Cependant, cela s'accompagne d'un compromis : si votre système de cache tombe en panne, assurez-vous que votre base de données est prête à gérer la charge accrue.

Modèles de cache

Maintenant que vous comprenez le pouvoir de la mise en cache, examinons les meilleures façons de l'utiliser ! Dans cette section, nous explorerons deux catégories essentielles de modèles : les modèles d'écriture de cache et les modèles d'échec de cache . Ces modèles fournissent des stratégies pour gérer les mises à jour du cache et gérer les situations dans lesquelles les données dont vous avez besoin ne sont pas encore dans le cache.

Modèles d'écriture

Les modèles d'écriture dictent la manière dont votre application interagit à la fois avec le cache et votre base de données. Examinons trois stratégies courantes : Write-back , Write-through et Write-around . Chacun offre des avantages et des compromis uniques :

Répondre


Modèle de cache de réécriture

Comment ça fonctionne:

  • Votre application interagit uniquement avec le cache.
  • Le cache confirme l'écriture instantanément.
  • Un processus en arrière-plan copie ensuite les données nouvellement écrites dans la base de données.


Idéal pour : les applications gourmandes en écriture où la vitesse est essentielle et où une certaine incohérence est acceptable pour des raisons de performances. Les exemples incluent les applications de métriques et d’analyse.


Avantages :

  • Lectures plus rapides : les données sont toujours dans le cache pour un accès rapide, contournant entièrement la base de données.
  • Écritures plus rapides : votre application n'attend pas les écritures de la base de données, ce qui entraîne des temps de réponse plus rapides.
  • Moins de pression sur la base de données : les écritures par lots réduisent la charge de la base de données et peuvent potentiellement prolonger la durée de vie de votre matériel de base de données.


Désavantages:

  • Risque de perte de données : si le cache échoue avant que les données ne soient enregistrées dans la base de données, des informations peuvent être perdues. Redis atténue ce risque grâce au stockage persistant, mais cela ajoute de la complexité.


  • Complexité accrue : vous aurez besoin d'un middleware pour garantir que le cache et la base de données restent finalement synchronisés.


  • Potentiel d'utilisation élevée du cache : toutes les écritures sont d'abord transférées dans le cache, même si les données ne sont pas fréquemment lues. Cela peut entraîner une consommation de stockage élevée.

Écrire via


Politique de cache en écriture directe

Comment ça fonctionne:

  • Votre application écrit simultanément dans le cache et dans la base de données.


  • Pour réduire le temps d'attente, vous pouvez écrire dans le cache de manière asynchrone. Cela permet à votre application de signaler les écritures réussies avant que l'opération de cache ne soit complètement terminée.


Avantages :

  • Lectures plus rapides : comme pour l'écriture différée, les données sont toujours dans le cache, éliminant ainsi le besoin de lectures dans la base de données.


  • Fiabilité : votre application ne confirme une écriture qu'après son enregistrement dans la base de données, garantissant ainsi la persistance des données même si un crash survient immédiatement après.


Désavantages:

  • Écritures plus lentes : par rapport à l'écriture différée, cette stratégie entraîne une certaine surcharge car l'application attend que la base de données et le cache écrivent. Les écritures asynchrones améliorent cela, mais rappelez-vous qu'il y a toujours le temps d'attente de la base de données.


  • Utilisation élevée du cache : toutes les écritures sont transférées dans le cache, consommant potentiellement de l'espace de stockage même si les données ne sont pas fréquemment consultées.

Écrire autour


Modèle de cache en écriture

Avec Write-Around, votre application écrit les données directement dans la base de données, en contournant le cache pendant le processus d'écriture. Pour remplir le cache, il utilise une stratégie appelée modèle cache-aside :


  1. La demande de lecture arrive : l'application vérifie le cache.


  2. Manque de cache : si les données ne sont pas trouvées dans le cache, l'application les récupère dans la base de données, puis les stocke dans le cache pour une utilisation ultérieure.


Avantages :

  • Écritures fiables : les données sont écrites directement dans la base de données, garantissant ainsi leur cohérence.
  • Utilisation efficace du cache : seules les données fréquemment consultées sont mises en cache, réduisant ainsi la consommation de mémoire.


Désavantages:

  • Latence de lecture plus élevée (dans certains cas) : si les données ne sont pas dans le cache, l'application doit les récupérer dans la base de données, ce qui ajoute un aller-retour par rapport aux politiques où le cache est toujours pré-rempli.

Modèle d'échec du cache


Modèle d'échec du cache

Un échec de cache se produit lorsque les données dont votre application a besoin ne sont pas trouvées dans le cache. Voici deux stratégies courantes pour résoudre ce problème :


  1. Cache-mis à part
    • L'application vérifie le cache.

    • En cas d'échec, il récupère les données de la base de données, puis met à jour le cache.

    • Point clé : L’application se charge de gérer le cache.


L’utilisation d’un modèle Cache-Aside signifie que votre application gérera le cache. Cette approche est la plus courante à utiliser car elle est simple et ne nécessite pas de développement ailleurs que dans l'application.


  1. Lire à travers
    • L'application fait une requête sans connaître le cache.

    • Un mécanisme spécialisé vérifie le cache et récupère les données de la base de données si nécessaire.

    • Le cache est mis à jour de manière transparente.


Les modèles de lecture directe réduisent la complexité des applications, mais augmentent la complexité de l'infrastructure. Cela permet plutôt de décharger la ressource de l’application vers le middleware.


Dans l’ensemble, le modèle d’écriture avec cache-aside est le plus couramment utilisé en raison de sa facilité de mise en œuvre. Cependant, je recommande également d'inclure le modèle d'écriture directe si vous disposez de données qui seront utilisées immédiatement après leur mise en cache. Cela apportera un léger avantage aux performances de lecture.

Meilleures pratiques de mise en cache

Dans cette section, nous explorerons les meilleures pratiques d'utilisation d'un cache. Le respect de ces pratiques garantira que votre cache conserve des données fraîches et gère efficacement son stockage.

Invalidation du cache

Imaginez que vous avez stocké des données dans le cache, puis que la base de données est mise à jour. Cela fait que les données du cache diffèrent de la version de la base de données. Nous appelons ce type de données en cache « périmées ». Sans technique d'invalidation du cache, vos données mises en cache pourraient rester obsolètes après les mises à jour de la base de données. Pour conserver les données à jour, vous pouvez utiliser les techniques suivantes :


  1. Invalidation du cache lors de la mise à jour : lorsque vous mettez à jour des données dans la base de données, mettez également à jour l'entrée de cache correspondante. Les modèles d'écriture directe et de réécriture gèrent cela de manière inhérente, mais l'écriture indirecte/la mise en cache nécessite une suppression explicite des données mises en cache. Cette stratégie empêche votre application de récupérer des données obsolètes.


  2. Time To Live (TTL) : TTL est une politique que vous pouvez définir lors du stockage des données dans le cache. Avec TTL, les données sont automatiquement supprimées après une heure spécifiée. Cela permet d'effacer les données inutilisées et fournit une sécurité contre les données obsolètes en cas d'invalidations manquées.

Politiques de remplacement du cache

Si vous mettez en cache une grande quantité de données, votre stockage en cache pourrait se remplir. Les systèmes de cache utilisent généralement de la mémoire, qui est souvent plus petite que le stockage de votre base de données principale. Lorsque le cache est plein, il doit supprimer certaines données pour libérer de l'espace. Les politiques de remplacement du cache déterminent les données à supprimer :


  1. Les moins récemment utilisées (LRU) : cette stratégie commune supprime les données qui n'ont pas été utilisées (lues ou écrites) depuis le plus longtemps. LRU convient à la plupart des cas d’utilisation réels.


  2. Les moins fréquemment utilisés (LFU) : similaire à LRU, mais se concentre sur la fréquence d'accès. Les données nouvellement écrites peuvent être expulsées, pensez donc à ajouter une période de préchauffage pendant laquelle les données ne peuvent pas être supprimées.


D'autres politiques de remplacement comme le FIFO (First-In, First-Out), le remplacement aléatoire, etc. existent mais sont moins courantes.

Quand ne pas mettre en cache

Avant de plonger dans la mise en œuvre du cache, il est important de savoir quand cela n’est peut-être pas la meilleure solution. La mise en cache améliore souvent la vitesse et réduit la charge de la base de données, mais cela peut ne pas avoir de sens si :


  1. Faible trafic : si votre application a un faible trafic et que le temps de réponse est toujours acceptable, vous n'avez probablement pas encore besoin de mise en cache. L'ajout d'un cache augmente la complexité. Il est donc préférable de l'implémenter lorsque vous êtes confronté à des goulots d'étranglement en termes de performances ou que vous anticipez une augmentation significative du trafic.


  2. Votre système est gourmand en écriture : la mise en cache est plus avantageuse dans les applications gourmandes en lecture. Cela signifie que les données de votre base de données sont rarement mises à jour ou lues plusieurs fois entre les mises à jour. Si votre application a un volume d'écritures élevé, la mise en cache peut potentiellement ajouter une surcharge et ralentir les choses.

Points à retenir

Dans cet article, nous avons couvert les bases de la mise en cache et comment l'utiliser efficacement. Voici un récapitulatif des points clés :


  1. Confirmez le besoin : assurez-vous que votre système est lourd en lecture et nécessite les offres de mise en cache de réduction de latence.


  2. Choisissez judicieusement les modèles : sélectionnez des modèles d'écriture de cache et d'échec de cache qui correspondent à la manière dont votre application utilise les données.


  3. Fraîcheur des données : mettez en œuvre des stratégies d'invalidation du cache pour éviter de diffuser des données obsolètes.


  4. Gérer la politique de remplacement : choisissez une politique de remplacement du cache (comme LRU) pour gérer les suppressions lorsque le cache atteint sa capacité.

Les références

  1. https://gist.github.com/jboner/2841832
  2. https://www.bytesizedpieces.com/posts/cache-types
  3. https://www.techtarget.com/searchstorage/definition/cache
  4. https://www.youtube.com/watch?v=dGAgxozNWFE