Stockage persistant : la mémoire à long terme à l'ère des conteneurs

Publié: 2023-04-17

Le stockage persistant fait référence à la conservation des données de manière non volatile afin qu'elles restent disponibles même après la mise hors tension ou le redémarrage d'un appareil ou d'une application. Le stockage et la récupération des données permettent aux applications Web d'enregistrer les informations et les états des utilisateurs et de fonctionner de manière fiable.

Dans les applications monolithiques, l'accès au stockage est simple car le serveur et le stockage cohabitent. Cependant, les systèmes distribués géographiquement rendent l'accès plus complexe, car le système de stockage doit rester disponible pour tous les composants dans le monde.

La conteneurisation complique davantage le problème, car les conteneurs sont légers, sans état et éphémères, des caractéristiques inadaptées au stockage des données. Par conséquent, toute solution de stockage persistant doit pouvoir fonctionner de manière transparente avec les conteneurs, ce qui ajoute une autre couche de complexité.

Cet article se penche sur le stockage persistant en explorant ses types, son architecture et ses cas d'utilisation. Il fournit également une démonstration pratique illustrant la différence entre le stockage de volume et le stockage de volume persistant dans Docker.

Types de stockage persistant

Il existe plusieurs types de stockage non volatile, notamment les disques rotatifs traditionnels (disques durs ou HDD), les disques SSD, le stockage en réseau (NAS) et les réseaux de stockage (SAN).

  • Les disques durs sont des dispositifs de stockage de données électromécaniques qui stockent et récupèrent des données numériques à l'aide de disques rotatifs de supports magnétiques. Les disques utilisent des têtes magnétiques sur un bras actionneur mobile qui lisent et écrivent des données.
  • Les disques SSD , parfois appelés dispositifs de stockage à semi-conducteurs, dispositifs à semi-conducteurs ou disques à semi-conducteurs, utilisent des assemblages de circuits intégrés pour stocker des données de manière persistante, généralement à l'aide de dispositifs flash interconnectés ne contenant aucune pièce mobile. Leur nature stationnaire les rend plus rapides et plus fiables que les disques durs.
  • Le stockage en réseau est un groupe de disques durs, de disques SSD ou des deux connectés via un réseau local à l'aide d'un système de fichiers tel que le système de fichiers de nouvelle technologie (NTFS) ou le quatrième système de fichiers étendu (EXT4).
  • Les SAN sont des périphériques de stockage en réseau à haut débit, au niveau des blocs, comme les bibliothèques de bandes ou les baies de disques. Leur connexion apparaît au système d'exploitation comme un stockage local et n'est pas accessible via le réseau local (LAN).
Protégez vos données pendant les arrêts et les redémarrages grâce au stockage persistant ! Voici comment cliquer pour tweeter

Architecture de stockage persistant

Il existe trois approches du stockage persistant, chacune avec des cas d'utilisation et des limites uniques.

Architecture persistante d'objet

L'approche d'architecture persistante d'objet utilise le mappage objet-relationnel (ORM) pour stocker les données sous forme d'objets dans une base de données relationnelle ou clé-valeur. Cette approche est utile lorsque les données n'ont pas de schéma défini, car l'ORM gère leur stockage et leur récupération.

Bloquer l'architecture persistante

L'architecture persistante en blocs utilise des périphériques de stockage au niveau des blocs, qui sont utiles lors du stockage de fichiers volumineux. Cette approche est avantageuse lors du stockage de grandes quantités de données, car vous pouvez utiliser plusieurs blocs pour augmenter la capacité de stockage.

Architecture persistante du magasin de fichiers

Comme son nom l'indique, l'approche de l'architecture persistante du magasin de fichiers utilise un système de fichiers pour stocker les données. Une méthode consiste à utiliser des serveurs de base de données, qui fournissent un moyen centralisé de stockage des données. Les solutions d'hébergement cloud comme celles de Kinsta utilisent des serveurs de base de données qui sont facilement attachés aux applications et offrent une persistance.

L'architecture persistante du magasin de fichiers est utile dans les applications nécessitant une récupération fréquente de fichiers et lorsque vous avez besoin d'une interface pour les gérer.

Cas d'utilisation du stockage persistant

Cette section traite de certains des cas d'utilisation de chaque type de stockage.

Stockage persistant d'objets

  • Stockage dans le cloud : le stockage persistant d'objets est couramment utilisé dans les solutions de stockage dans le cloud pour stocker et récupérer de grandes quantités de données non structurées, telles que des images, des vidéos et des documents. Les fournisseurs de cloud utilisent le stockage d'objets pour fournir aux clients des services de stockage évolutifs, hautement disponibles et durables.
  • Analyse de données volumineuses : le stockage persistant d'objets est utilisé dans l'analyse de données volumineuses pour stocker et gérer de grands ensembles de données souvent utilisés pour l'analyse de données, l'apprentissage automatique et l'IA. Le stockage d'objets permet d'accéder rapidement et efficacement aux données, ce qui en fait un élément clé des architectures Big Data.
  • Réseaux de diffusion de contenu : le stockage persistant d'objets est utilisé dans les réseaux de diffusion de contenu (CDN) pour stocker et distribuer du contenu, tel que des images, des vidéos et des fichiers statiques, sur un réseau mondial de serveurs. Le stockage d'objets permet aux CDN de fournir du contenu à haut débit aux utilisateurs du monde entier, quel que soit leur emplacement.

Bloquer le stockage persistant

  • Calcul haute performance (HPC) : environnements HPC traitement rapide et efficace de volumes de données conséquents. Le stockage persistant en mode bloc permet aux clusters HPC de stocker et de récupérer de grands ensembles de données, tels que des simulations scientifiques, des modélisations météorologiques et des analyses financières. Le stockage par blocs est souvent préféré pour HPC car il fournit un accès aux données hautes performances et à faible latence et permet des opérations d'entrée/sortie (E/S) parallèles, ce qui peut améliorer considérablement les temps de traitement.
  • Montage vidéo : les applications de montage vidéo nécessitent un accès hautes performances et à faible latence aux fichiers vidéo volumineux. Ils doivent également prendre en charge un nombre important d'opérations d'E/S par seconde et une faible latence pour restituer et éditer les fichiers vidéo en temps réel. Le stockage en bloc offre ces fonctionnalités, ce qui en fait une solution idéale pour les workflows de montage vidéo.
  • Jeux : les applications de jeu exigent également des performances élevées et une faible latence pour accéder aux ressources de jeu et aux données des joueurs. Le stockage en bloc stocke et récupère rapidement de grandes quantités de données, garantissant que les environnements de jeu se chargent rapidement et restent réactifs pendant le jeu.

Stockage persistant du magasin de fichiers

  • Médias et divertissement : les applications de montage vidéo, d'animation et de rendu utilisent couramment le stockage persistant. Ces applications nécessitent un accès hautes performances et à faible latence aux fichiers multimédias volumineux, tels que la vidéo, l'audio et les images. Filestore fournit un système de fichiers partagé auquel plusieurs clients peuvent accéder, ce qui en fait une solution de stockage idéale pour ces applications.
  • Gestion de contenu Web : les systèmes de gestion de contenu Web (CMS) utilisent le stockage persistant du magasin de fichiers dans des systèmes de fichiers partagés pour stocker et gérer le contenu du site Web, tel que le texte, les images et les fichiers multimédias. Filestore fournit un emplacement central pour le contenu du site Web, ce qui facilite sa gestion et sa mise à jour. Il permet également à plusieurs utilisateurs de travailler simultanément sur le même contenu, améliorant ainsi la collaboration et la productivité.

Stockage persistant dans des conteneurs

Les conteneurs sont légers, portables, sécurisés et simples, offrant une fusion entre différentes applications. Ils doivent disposer d'un mécanisme permettant de conserver les données entre les redémarrages et la suppression du conteneur. Les conteneurs ont un stockage de fichiers ou un système de fichiers comme les applications traditionnelles, mais chaque fois que vous les reconstruisez avec de nouvelles modifications, vous perdez toutes les données non persistantes.

C'est pourquoi les conteneurs offrent la possibilité d'inclure un volume de stockage ou de monter un volume de stockage. Les conteneurs traitent les volumes de stockage comme un répertoire. Toutes les données écrites sur le volume vont dans le système de fichiers hôte.

Le stockage persistant pour les conteneurs doit fonctionner de cette manière car le redémarrage d'un conteneur crée une nouvelle instance et supprime l'ancienne instance. Si un conteneur n'a pas une vue cohérente des données, les données disparaîtront au redémarrage du conteneur. Un volume de stockage préserve les données à travers les sessions et les redémarrages du conteneur, permettant au conteneur de conserver son état même s'il est déplacé ou redémarré.

Volume vs volume persistant

Les conteneurs offrent 2 façons de stocker des données persistantes : en utilisant des volumes et des volumes persistants. Il y a une différence significative entre eux. Un conteneur gère les données dans le stockage en volume. Lorsque vous arrêtez un conteneur, les données restent et sont disponibles lorsque vous redémarrez le conteneur. Cependant, lorsque vous supprimez ou supprimez un conteneur, les données sont perdues car vous supprimez également le stockage de volume sous-jacent.

Le stockage de volume persistant ou les montages liés est un moyen de stocker les données en dehors du système de fichiers du conteneur. De cette façon, les données ne sont pas perdues même lorsque vous supprimez le conteneur. Il est persistant jusqu'à sa suppression manuelle.

La section suivante illustre les deux types de volume avec des exemples.

Démonstration du stockage persistant de conteneurs

Nous avons créé une petite application Web pour démontrer le stockage persistant avec les conteneurs Docker. Vous pouvez suivre en installant Docker et en récupérant le code de ce référentiel GitHub.

L'application est un formulaire élémentaire avec 2 champs de saisie utilisateur :

  • Titre
  • Texte du document
Capture d'écran : l'interface graphique du formulaire de commentaires de l'application de démonstration.
Interface graphique de l'application de démonstration avec les champs Titre et Texte du document .

Une fois que vous avez enregistré l'entrée utilisateur, vous pouvez y accéder en ouvrant le fichier dans le répertoire de commentaires avec le nom fourni dans le champ Titre . L'entrée du champ Texte du document est le contenu du fichier.

Comment utiliser le stockage en volume

Une fois que vous avez installé l'application sur votre propre machine, elle peut utiliser le stockage en volume comme indiqué dans le Dockerfile .

Capture d'écran : Contenu du fichier Docker, y compris un attribut VOLUME.
Dockerfile montrant l'utilisation du stockage en volume.

Maintenant, vous créez l'image et exécutez le conteneur. Pour ce faire, exécutez les commandes suivantes.

 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Capture d'écran : fenêtre de terminal affichant les résultats de la commande docker build avec stockage de volume.
Construire l'application avec un volume de stockage.
Capture d'écran : fenêtre du terminal après l'exécution de la commande docker run avec stockage de volume.
L'exécution du conteneur indique qu'il gère le stockage en volume.

Une fois l'application exécutée, accédez à localhost:3000 pour soumettre des commentaires.

Capture d'écran : Soumettre des commentaires via l'interface graphique de l'application de démonstration.
Soumettre des commentaires à l'application.

Cliquez sur Enregistrer et accédez à localhost:3000/feedback/test.txt pour voir si l'entrée est stockée avec succès ou non.

Capture d'écran : Un navigateur avec le fichier test.txt soumis ouvert.
Rétroaction réussie confirmée.

Supprimez et redémarrez le conteneur pour voir si l'entrée persiste.

 docker stop feedback-app docker start feedback-app

Si vous visitez maintenant la même URL, vous voyez que les commentaires sont toujours là. Mais que se passe-t-il si vous supprimez le conteneur et le redémarrez ?

 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

Une fois redémarré, si vous revenez à cette URL, elle n'existe plus car les données ont été perdues lorsque vous avez supprimé le conteneur. Les données de volume persistent uniquement lors de l'arrêt du conteneur, pas lors de sa suppression.

Capture d'écran : Le navigateur signale un échec d'ouverture du fichier test.txt.
Les données de rétroaction ont été perdues.

Pour atténuer ce problème et conserver les données même lorsque vous supprimez le conteneur, vous devez utiliser un stockage de volume persistant ou un stockage nommé. Tout d'abord, vous devez nettoyer les conteneurs et les images.

 docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes

Comment utiliser le stockage de volume persistant

Avant de tester cela, vous devez supprimer l'attribut VOLUME du Dockerfile et reconstruire l'image.

Capture d'écran : Dockerfile modifié pour supprimer l'attribut VOLUME.
Mise à jour de Dockerfile pour supprimer l'attribut VOLUME.
 docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Comme vous pouvez le voir, dans la deuxième commande, vous utilisez l'indicateur -v pour définir le volume persistant en dehors du conteneur, qui persiste même lorsque vous supprimez le conteneur.

Comme à l'étape précédente, essayez d'ajouter des commentaires et accédez-y une fois que vous avez arrêté, supprimé et redémarré le conteneur.

Capture d'écran : saisie de texte dans le formulaire de commentaires de l'application de démonstration.
Ajout de nouveaux commentaires pour un test de persistance.
 docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Comme vous le voyez, même après avoir arrêté et supprimé le conteneur, les données sont accessibles et elles le restent.

Capture d'écran : Navigateur qui a ouvert avec succès le deuxième fichier de test.
Après l'arrêt et la suppression du conteneur, les données sont conservées.
Stockage persistant : la clé d'applications conteneurisées stables et fiables ! Plongez dans les types, l'architecture et les cas d'utilisation ici ️ Cliquez pour tweeter

Résumé

Le stockage persistant est vital pour les applications conteneurisées car il permet la persistance des données en dehors du cycle de vie d'un conteneur. Les 2 principaux types de stockage persistant pour les applications conteneurisées sont les volumes et les montages liés, chacun avec ses avantages et ses cas d'utilisation.

Les volumes sont stockés dans le système de fichiers du conteneur, tandis que les montages liés sont directement accessibles sur la machine hôte.

Le stockage persistant permet de partager les données entre les conteneurs, ce qui permet de créer des applications complexes à plusieurs niveaux. Le stockage persistant est essentiel pour assurer la stabilité et la continuité des applications conteneurisées, offrant un moyen fiable et flexible de stocker des données cruciales.

Et si vous utilisez Docker pour développer vos applications Web, vous constaterez qu'il est facile de configurer les déploiements de Dockerfile avec le service d'hébergement d'applications de Kinsta.