Décodez le Stockage : Fichiers, Objets ou Blocs ? Le bon stockage pour booster votre app !

Dans le domaine du développement et de la gestion des applications, comprendre les différents types de stockage — blocs, fichiers et objets — est crucial pour accéder à certaines fonctionnalités et optimiser la performance des systèmes et de l’architecture. Cet article explore chaque type de stockage, en expliquant son fonctionnement, comment y accéder depuis une application puis en illustrant chaque concept avec des technologies spécifiques.

1 - Stockage Bloc (Block Storage)

Qu'est-ce que c'est ?

Le stockage blocs fonctionne en subdivisant les données en blocs séquentiels de taille fixe, chacun accessible indépendamment.

Le concept est équivalent à brancher une clé USB sur un PC : le disque est monté par le système d’exploitation et peut être utilisé par une seule machine à la fois (en effet, si l’on souhaite accéder à la clé USB depuis un autre poste, il faudra inévitablement la débrancher et la rebrancher sur l’autre machine, rendant ainsi le stockage accessible par une seule machine uniquement).

Pour réaliser un parallèle avec les environnements comme Kubernetes, ce concept est connu sous le terme de ReadWriteOnce (RWO), où le volume peut être monté en lecture-écriture par un seul nœud.

Et pour mon cas d'usage ?

En tant que développeur, je souhaite déployer une base de données transactionnelle.

Use Case : Pour garantir des performances optimales et une latence réduite pour une application e-commerce nécessitant des transactions rapides et sécurisées, je choisis le stockage en blocs. Celui-ci me permet d’attacher et de gérer des volumes de stockage comme des disques durs virtuels, où chaque volume peut être formaté avec un système de fichiers et monté exclusivement par un serveur de base de données à la fois, équivalent à RWO (ReadWriteOnce) dans Kubernetes.

Comment accéder à ce stockage depuis une application ?

Dans le cas d’un système d’exploitation, les volumes de stockage blocs peuvent être formatés avec des systèmes de fichiers comme ext4 (Linux) ou NTFS (Windows), puis montés directement sur le système de fichiers de l’hôte. Une application accède ensuite à ce volume de stockage blocs à travers le système de fichiers local, comme elle le ferait avec n’importe quel disque dur interne.

 

Prenons un exemple concret : je souhaite accéder à un fichier nommé « maphoto.jpg ». Puisqu’on accède aux fichiers comme sur n’importe quel système de fichiers local après montage, on utilise les mêmes méthodes que pour un fichier local :

				
					// File: app-rwo.js
const fs = require('fs');

fs.readFile('/path/to/maphoto.jpg', (err, data) => {
    if (err) throw err;
    console.log(data);
});
				
			

2 - Stockage Fichiers (File Storage)

Qu'est-ce que c'est ?

Le stockage de fichiers est un modèle de stockage basé sur une structure de dossiers et de fichiers hiérarchiques, accessible via le réseau.

Dans le langage Kubernetes, ce type de stockage correspond à ReadWriteMany (RWX), permettant à plusieurs pods de lire et écrire simultanément dans un volume partagé, même s’ils sont répartis sur plusieurs noeuds différents.

Et pour mon cas d'usage ?

En tant que développeur, je souhaite créer un système de partage de fichiers pour une application collaborative.

Use Case : Pour une application de gestion de projet permettant aux utilisateurs de partager des documents, des images et d’autres types de fichiers en temps réel, j’utilise le stockage de fichiers avec NFS ou SMB. Ce type de stockage supporte RWX (ReadWriteMany), permettant à plusieurs machines et applications de lire et écrire dans les mêmes fichiers simultanément, facilitant la collaboration et la gestion de documents au sein d’une équipe dispersée géographiquement.

Comment accéder à ce stockage depuis une application ?

Les applications accèdent au stockage fichiers via des protocoles de réseau tels que NFS (Network File System – UNIX, Linux) ou SMB (Server Message Block – Windows), qui permettent le montage du stockage à distance comme s’il faisait partie du système de fichiers local. Cela est idéal pour des applications qui nécessitent un partage de fichiers entre plusieurs utilisateurs ou services.

Pour reprendre notre exemple : on souhaite accéder à un fichier nommé « maphoto.jpg ». L’accès aux fichiers sur un système de fichiers monté via NFS ou SMB serait identique à celui d’un fichier local dans NodeJS. Assurez-vous que le chemin spécifié est celui où le système de fichiers réseau est monté sur votre machine locale ou serveur :

				
					// File: app-rwx.js
const fs = require('fs');

fs.readFile('/mounted/path/to/maphoto.jpg', (err, data) => {
    if (err) throw err;
    console.log(data);
});

				
			

3 - Stockage Objets (Object Storage)

Qu'est-ce que c'est ?

Le stockage objets traite les données comme des objets distincts (plutôt que comme des blocs de données ou des fichiers hiérarchiques). Chaque objet inclut les données, un ensemble extensible de métadonnées et un identifiant global unique.

Il s’agit typiquement du stockage que vos équipes vont désigner sous le nom de « bucket ».

 

Et pour mon cas d'usage ?

En tant que développeur, je souhaite construire une application de médias sociaux gérant des volumes importants de contenus multimédia.

Use Case : Pour stocker et servir efficacement des images, vidéos et autres fichiers médias pour une plateforme de médias sociaux, je choisis le stockage d’objets utilisant une API S3 (AWS S3, Minio, Scaleway Object Storage, OVH Object Storage, etc). Ce type de stockage facilite l’accès et la gestion à grande échelle, pour un coût de stockage inférieur aux stockages blocs ou fichiers. Les API, basées sur le protocole HTTP, permettent à l’application d’intégrer facilement des opérations de stockage, telles que l’upload, le téléchargement, et la sécurisation des accès aux données.

Comment accéder à ce stockage depuis une application ?

Les applications accèdent au stockage d’objets via des API HTTP, ce qui facilite l’intégration avec des applications modernes basées sur le Web. Ces API permettent d’effectuer des opérations CRUD (créer, lire, mettre à jour, supprimer) sur les objets individuels.

 

S’il est idéal de prendre un object storage proposé par un hébergeur vu précédemment pour garantir la réplication des données et la maîtrise des coûts, Minio reste un excellent candidat pour faire des tests en local. Il s’agit d’une solution de stockage d’objets compatible avec l’API S3, destinée à être déployée sur des infrastructures privées. Prenons un exemple, pour accéder à « maphoto.jpg » avec Minio :

				
					// File: app-object.js

const Minio = require('minio');
const minioClient = new Minio.Client({
    endPoint: 'localhost',
    port: 9000,
    useSSL: false,
    accessKey: 'YOUR-ACCESSKEYID',
    secretKey: 'YOUR-SECRETACCESSKEY'
});

const params = {
    Bucket: 'mon-bucket',
    Key: 'maphoto.jpg'
};

minioClient.getObject('mon-bucket', 'maphoto.jpg', (err, stream) => {
    if (err) {
        return console.log(err);
    }
    stream.pipe(process.stdout);
});
				
			

En bref

Chaque type de stockage offre donc des avantages uniques adaptés à différents cas d’utilisation, allant du partage de fichiers multi-utilisateurs au stockage de données à grande échelle pour les applications web modernes. Faites le bon choix pour votre système : la performance, la scalabilité et la sécurité de vos applications en dépendent !

Partager sur les réseaux

Nous répondons à toutes vos questions

Laissez-nous vos coordonnées et nous vous recontacterons :