- 3FS ist ein von DeepSeek entwickeltes leistungsstarkes Open-Source-Distributed-File-System und unterstützt groß angelegte Datenverarbeitung sowie hohen Durchsatz
- Es verhält sich wie ein gewöhnliches Dateisystem, speichert Daten tatsächlich aber verteilt über mehrere Maschinen und bietet eine Abstraktionsschicht, sodass Nutzer sich dessen nicht bewusst sein müssen
- Über vier zentrale Komponenten (Meta, Mgmtd, Storage, Client) werden Metadatenverwaltung, Knotenmanagement, tatsächliche Datenspeicherung und die Verarbeitung von Nutzeranfragen getrennt betrieben
- Mit dem CRAQ-Algorithmus werden starke Konsistenz und Fehlertoleranz erreicht, wobei Schreibanfragen in einer Kettenstruktur sicher weitergegeben werden
- 3FS hebt sich im Vergleich zu anderen verteilten Dateisystemen durch praktische Einsetzbarkeit und skalierbare Performance ab
Was ist 3FS?
- 3FS steht für Fire-Flyer File System und ist ein von DeepSeek veröffentlichtes verteiltes Dateisystem
- Es wurde zusammen mit DeepSeeks Open-Source-Veröffentlichungswoche herausgegeben
- Es sieht wie ein gewöhnlicher Dateipfad aus, abstrahiert in Wirklichkeit aber Daten, die über mehrere Maschinen verteilt gespeichert sind
Was ist ein verteiltes Dateisystem?
- Für Nutzer sieht es wie ein lokales Dateisystem aus, tatsächlich werden die Daten jedoch auf mehrere Server verteilt gespeichert
- Beispiel: Der Pfad
/3fs/stage/notes.txt wirkt wie eine einzelne Datei, ist in Wirklichkeit aber über mehrere Server verteilt gespeichert
- Nutzer können es mit Befehlen wie
mkdir oder cat wie eine normale Datei verwenden
Warum verwendet man ein verteiltes Dateisystem?
- Unterstützung für große Datenmengen (im Petabyte-Bereich) und hohen Durchsatz
- Gewährleistet Stabilität durch Fehlertoleranz (fault tolerance) und Redundanz (redundancy)
- Praktische Einsatzbeispiele:
- Parallele Verarbeitungs-Frameworks wie HDFS + Spark
- Checkpointing in ML-Trainingspipelines
- Googles Colossus
- Metas Fotospeicher Haystack
- Storage für KI, z. B. JuiceFS vs CephFS
Komponenten von 3FS
- Es besteht insgesamt aus vier zentralen Knotentypen
Meta
- Verwaltet Metadaten wie Dateipfade, Attribute und Speicherorte
- Verarbeitet Client-Anfragen per RPC (
open, stat, close usw.)
- Metainformationen werden in FoundationDB gespeichert
Inode speichert Informationen wie Dateigröße und Besitzer
DirEntry verknüpft Pfad und Inode (wie bei symbolischen Links können mehrere Pfade auf dieselbe Datei verweisen)
Mgmtd
- Zuständig für Knotenregistrierung und Statusprüfung im Cluster
- Knoten registrieren sich beim Booten selbst und senden regelmäßig Heartbeats
- Übernimmt die Rolle eines zentralen Routers, sodass Knoten keine direkten Verbindungen untereinander aufrechterhalten müssen
- Verwaltet auch Konfigurationsinformationen für den Aufbau der CRAQ-Kette
Storage
- Zuständig für die tatsächliche Datenspeicherung
- Verwaltet Festplattenblöcke über die Rust-basierte ChunkEngine
- Verfolgt Größe, Offset, Checksumme, Version usw. der Festplattenblöcke
- Nutzer interagieren nicht direkt mit den Blöcken; stattdessen wird eine Schnittstelle bereitgestellt
- Metadaten werden in LevelDB gespeichert
- Es gibt verschiedene Worker
AllocateWorker weist neue Blöcke zu
PunchHoleWorker räumt ungenutzte Blöcke auf
AioReadWorker verarbeitet asynchrone Lesevorgänge über die io_uring-Queue
- Bei Schreibvorgängen wird entlang der CRAQ-Kette an den nächsten Knoten weitergeleitet
Client
- Verarbeitet Nutzeranfragen und kommuniziert mit anderen Knoten
- Ablauf:
- Abfrage der Knotenpositionen bei Mgmtd
- Anforderung von Dateioperationen bei Meta
- Datentransfer mit Storage
CRAQ-Algorithmus
- Steht für Chain Replication with Apportioned Queries und bietet starke Konsistenz (Linearizability)
- Schreibablauf:
- Weitergabe des Schreibvorgangs in der Reihenfolge Head → Middle → Tail
- In den Zwischenstufen werden Daten als dirty markiert (nicht lesbar)
- Nach dem Commit am Tail wird der Status rückwärts als clean propagiert
- Leseablauf:
- Wenn clean, sofortige Rückgabe
- Wenn dirty, Anfrage an den Tail, um die neuesten Daten abzurufen
CRAQ aus Performance-Sicht
- Die Schreibgeschwindigkeit ist durch den langsamsten Knoten begrenzt
- Bei häufig abgefragten dirty-Daten können sich Leseanfragen auf den Tail konzentrieren, wodurch ein Lese-Bottleneck entstehen kann
- Beispiel: Performance-Einbruch bei Zipfian workload
- In einem Cluster mit fünf Knoten wird auf drei repliziert, um Leistungsverluste bei Ausfällen zu minimieren
Unterschiede zu anderen verteilten Dateisystemen
- Die Grundstruktur ist ähnlich, aber es gibt Unterschiede bei Praxistauglichkeit und Implementierungsansatz
- Vergleichspunkte:
- Für welche Workloads es Stärken hat
- Flexibilität bei der Performance-Abstimmung
- Einfachheit der Bereitstellung
- Skalierbarkeit des Durchsatzes
- Latenzverwaltung innerhalb von SLOs
- Zuverlässigkeit
- Detaillierte technische Aspekte:
- Ursachen von Bottlenecks und deren Behandlung
- Vorhandensein oder Fehlen von Locks
- Verwendete Datenstrukturen
- Zielhardware
- Verwendete Fehlertoleranz-Algorithmen oder Fehlerkorrekturverfahren
Nächstes Thema der Blogserie
- Geplant ist, DeepSeeks Aussagen durch eine Analyse der tatsächlichen Performance zu überprüfen
- Prüfpunkte:
- DeepSeeks Behauptung zu FUSE-Bottlenecks
- Reproduzierbarkeit der Performance-Grafiken
- Analyse von Situationen mit Performance-Abfall
- Bottleneck-Faktoren (CPU, Speicher, Festplatte, Netzwerk)
- Bei welchen Workloads die Performance besonders gut ist
- Vergleichsanalyse mit bestehenden Systemen
- Unterschiede zu den Lösungsansätzen bestehender Systeme
- Prüfung direkter Verbesserungsmöglichkeiten
Weiterführende Materialien
2 Kommentare
Das war genau das Problem, über das ich auch nachgedacht habe, und das ...
Hacker-News-Kommentare
S3FS ist ein skalierbares Metadaten-Dateisystem und wird mit verschiedenen verteilten Dateisystemen verglichen
Bei der Bewertung dieser Systeme sollten theoretische Grenzen, Effizienz und praktische Grenzen berücksichtigt werden
Es besteht Interesse an einem Vergleich mit SeaweedFS
Frage, warum nicht CephFS verwendet wird
Frage nach einem Vergleich mit JuiceFS
Als kleiner Anbieter oder Homelab-Nutzer wird man vermutlich nie ein großes verteiltes Dateisystem einsetzen
Das Setup ist komplex, aber es ist nicht klar, welche Funktionen für Deep-Learning-Workloads zwingend notwendig sind
Frage, wie einfach sich DeepSeeks verteiltes Dateisystem deaktivieren lässt
Frage, ob sich das mit über mehrere Geräte verteilten ZFS-Laufwerken nachbilden lässt