- 3FS est un système de fichiers distribué open source haute performance développé par DeepSeek, conçu pour le traitement de données à grande échelle et un débit élevé
- Il se comporte comme un système de fichiers classique, mais stocke en réalité les données de façon distribuée sur plusieurs machines, avec une couche d’abstraction transparente pour l’utilisateur
- Il repose sur 4 composants principaux (Meta, Mgmtd, Storage, Client) qui séparent la gestion des métadonnées, la gestion des nœuds, le stockage effectif des données et le traitement des requêtes utilisateur
- Grâce à l’algorithme CRAQ, il atteint une forte cohérence et une tolérance aux pannes, en propageant de manière sûre les requêtes d’écriture dans une structure en chaîne
- 3FS se distingue des autres systèmes de fichiers distribués par sa praticabilité réelle et sa scalabilité des performances
Qu’est-ce que 3FS ?
- 3FS signifie Fire-Flyer File System, un système de fichiers distribué publié par DeepSeek
- Il a été lancé pendant la semaine de publication open source de DeepSeek
- Il ressemble à un chemin de fichier classique, mais fournit en réalité une abstraction de données réparties sur plusieurs machines
Qu’est-ce qu’un système de fichiers distribué ?
- Pour l’utilisateur, il ressemble à un système de fichiers local, mais les données sont en réalité réparties sur plusieurs serveurs
- Exemple : le chemin
/3fs/stage/notes.txt semble être un seul fichier, alors qu’il est en fait réparti sur plusieurs serveurs
- L’utilisateur peut s’en servir comme d’un fichier ordinaire avec des commandes comme
mkdir ou cat
Pourquoi utiliser un système de fichiers distribué ?
- Il prend en charge de très gros volumes de données (à l’échelle du pétaoctet) et un débit élevé
- Il garantit la stabilité grâce à la tolérance aux pannes (fault tolerance) et à la redondance
- Exemples d’usage concrets :
- des frameworks de traitement parallèle comme HDFS + Spark
- le checkpointing dans les pipelines d’entraînement ML
- Colossus de Google
- Haystack, le stockage photo de Meta
- des exemples de stockage pour l’IA : JuiceFS vs CephFS
Composants de 3FS
- Le système est composé de 4 types de nœuds principaux
Meta
- Gère les métadonnées comme les chemins de fichiers, les attributs et les emplacements
- Traite les requêtes client via RPC (
open, stat, close, etc.)
- Les métadonnées sont stockées dans FoundationDB
Inode stocke des informations comme la taille du fichier ou son propriétaire
DirEntry relie un chemin à un inode (comme avec un lien symbolique, plusieurs chemins peuvent donc exister pour un même fichier)
Mgmtd
- S’occupe de l’enregistrement des nœuds du cluster et du suivi de leur état
- Au démarrage, les nœuds s’enregistrent eux-mêmes puis envoient périodiquement des heartbeats
- Joue un rôle de routeur central, ce qui évite d’avoir à maintenir directement des connexions entre tous les nœuds
- Gère aussi les informations de configuration nécessaires à la constitution des chaînes CRAQ
Storage
- Assure le stockage effectif des données
- Gère les blocs disque via ChunkEngine, basé sur Rust
- Suit la taille, l’offset, le checksum, la version, etc. des blocs disque
- Fournit une interface sans que l’utilisateur interagisse directement avec les blocs
- Les métadonnées sont stockées dans LevelDB
- Plusieurs workers spécialisés sont présents
AllocateWorker alloue de nouveaux blocs
PunchHoleWorker récupère les blocs inutilisés
AioReadWorker gère les lectures asynchrones via la file io_uring
- Lors d’une écriture, les données sont transmises au nœud suivant le long de la chaîne CRAQ
Client
- Traite les requêtes utilisateur et communique avec les autres nœuds
- Flux de travail :
- interrogation de Mgmtd pour connaître l’emplacement des nœuds
- requêtes d’opérations sur les fichiers vers Meta
- transfert des données avec Storage
Algorithme CRAQ
- Acronyme de Chain Replication with Apportioned Queries, il fournit une forte cohérence (linearizability)
- Flux d’écriture :
- propagation de l’écriture dans l’ordre Head → Middle → Tail
- aux étapes intermédiaires, les données sont marquées dirty (lecture impossible)
- après commit au niveau du Tail, l’état clean est propagé en sens inverse
- Flux de lecture :
- si l’état est clean, la donnée est renvoyée immédiatement
- si l’état est dirty, une requête est envoyée au tail pour récupérer la donnée la plus récente
CRAQ du point de vue des performances
- La vitesse d’écriture est limitée par le nœud le plus lent
- Les données dirty fréquemment consultées peuvent concentrer les lectures sur le tail, ce qui peut créer un goulot d’étranglement en lecture
- Exemple : baisse de performances avec une charge de travail zipfienne
- Dans un cluster de 5 nœuds, une réplication sur 3 nœuds permet de limiter la perte de performances en cas de panne
Différences avec les autres systèmes de fichiers distribués
- L’architecture est similaire, mais 3FS se distingue par son applicabilité dans le monde réel et ses choix d’implémentation
- Éléments de comparaison :
- les workloads pour lesquels il est particulièrement adapté
- la flexibilité du réglage des performances
- la facilité de déploiement
- la scalabilité du débit
- la gestion de la latence dans le respect des SLO
- la fiabilité
- Détails techniques à observer :
- les causes des goulots d’étranglement et leur traitement
- la présence ou non de verrous
- les structures de données utilisées
- le matériel cible
- l’algorithme de tolérance aux pannes ou la méthode de correction d’erreurs utilisés
Prochain sujet de la série d’articles
- L’auteur prévoit de vérifier les affirmations de DeepSeek à travers une analyse des performances réelles
- Points examinés :
- les affirmations de DeepSeek sur les goulots d’étranglement de FUSE
- la possibilité de reproduire les graphiques de performances
- l’analyse des situations de dégradation des performances
- les éléments de goulot d’étranglement (CPU, mémoire, disque, réseau)
- les workloads dans lesquels les performances sont bonnes
- la comparaison avec les systèmes existants
- la différence avec les approches de résolution de problèmes des systèmes existants
- l’examen de possibilités d’amélioration directe
Ressources supplémentaires
2 commentaires
C’était justement le genre de problème sur lequel je réfléchissais, et ça...
Avis Hacker News
S3FS est un système de fichiers de métadonnées évolutif, comparé à divers systèmes de fichiers distribués
Lors de l’évaluation de ces systèmes, il faut prendre en compte les limites théoriques, l’efficacité et les limites pratiques
Il y a un intérêt pour une comparaison avec SeaweedFS
Question sur les raisons de ne pas utiliser CephFS
Question sur une comparaison avec JuiceFS
En tant que petit acteur ou utilisateur de homelab, il semble peu probable d’avoir un jour besoin d’un système de fichiers distribué à grande échelle
La configuration semble complexe, mais il n’est pas clair quelles fonctionnalités sont réellement indispensables pour des workloads de deep learning
Question sur la facilité avec laquelle le système de fichiers distribué de DeepSeek peut être désactivé
Question sur la possibilité de reproduire cela avec des disques ZFS répartis sur plusieurs machines