Analyse der Ähnlichkeiten und Unterschiede zwischen der Architektur von SeaweedFS und JuiceFS

SeaweedFS ist ein effizientes verteiltes Dateispeichersystem.Der früheste Design-Prototyp bezieht sich auf Facebooks Haystack, das in der Lage ist, kleine Datenblöcke schnell zu lesen und zu schreiben. Dieser Artikel hilft den Lesern, eine geeignetere Wahl zu treffen, indem er die Design- und Funktionsunterschiede zwischen SeaweedFS und JuiceFS vergleicht.

Struktur des SeaweedFS-Systems

SeaweedFS besteht aus 3 Teilen, dem Volume Server für die zugrunde liegende Dateispeicherung, dem Master Server für die Clusterverwaltung und einer optionalen Filer-Komponente, die mehr Funktionen nach oben bietet.

Volume-Server 与 Master-Server

Hinsichtlich des Systembetriebs dienen Volume Server und Master Server gemeinsam der Dateispeicherung. Volume Server konzentriert sich auf das Schreiben und Lesen von Daten, während Master Server eher ein Cluster- und Volumes-Verwaltungsdienst ist.

Beim Lesen und Schreiben von Daten ähnelt die Implementierung von SeaweedFS der von Haystack: Ein vom Benutzer erstelltes Volume ist eine große Festplattendatei (Superblock in der Abbildung unten). In diesem Volume werden alle vom Benutzer geschriebenen Dateien (Needle in der Abbildung unten) zu dieser großen Festplattendatei zusammengeführt.

Bevor mit dem Schreiben von Daten begonnen werden kann, muss sich der Aufrufer bei SeaweedFS (Master Server) anmelden, woraufhin SeaweedFS eine Datei-ID (zusammengesetzt aus Volume-ID und Offset) entsprechend der aktuellen Datenmenge zurückgibt Metadateninformationen (Dateilänge, Chunk und andere Informationen) werden ebenfalls geschrieben; wenn das Schreiben abgeschlossen ist, muss der Aufrufer die Datei und die zurückgegebene Datei-ID verknüpfen und in einem externen System (wie MySQL) speichern. Da die Datei-ID beim Lesen von Daten bereits alle Informationen zur Berechnung der Dateiposition (Offset) enthält, kann der Inhalt der Datei effizient gelesen werden.

Filer

Zusätzlich zu der oben erwähnten zugrunde liegenden Speichereinheit bietet SeaweedFS eine Komponente namens Filer. Durch die Verbindung von Volume Server und Master Server nach unten bietet er eine Fülle von Funktionen und Features (zB POSIX-Unterstützung, WebDAV, S3-Schnittstelle etc.). Wie JuiceFS muss auch Filer eine Verbindung zu einer externen Datenbank herstellen, um Metadateninformationen zu speichern.

Zur Vereinfachung der Erläuterung enthält das unten erwähnte SeaweedFS die Filer-Komponente.

JuiceFS-Systemstruktur

JuiceFS verwendet eine separate Speicherarchitektur für "Daten" und "Metadaten". Die Dateidaten selbst werden segmentiert und im Objektspeicher (z. B. Amazon S3) gespeichert, während die Metadaten in einer Datenbank nach Wahl des Benutzers (z. B. Redis, MySQL). Durch die gemeinsame Nutzung der gleichen Datenbank und des gleichen Objektspeichers implementiert JuiceFS ein verteiltes Dateisystem mit starker Konsistenzgarantie und verfügt außerdem über viele Funktionen wie "vollständige POSIX-Kompatibilität" und "hohe Leistung".

Metadatenvergleich

Sowohl SeaweedFS als auch JuiceFS unterstützen das Speichern von Metadateninformationen des Dateisystems über eine externe Datenbank. In Bezug auf die Datenbankunterstützung unterstützt SeaweedFS bis zu 24 Datenbanken. JuiceFS hat hohe Anforderungen an Datenbanktransaktionsfunktionen (siehe unten) und unterstützt derzeit insgesamt drei Arten von Transaktionsdatenbanken.

atomare Operation

Um die Atomarität aller Metadatenoperationen sicherzustellen, muss JuiceFS auf der Implementierungsebene eine Datenbank mit Transaktionsverarbeitungsfunktionen verwenden. SeaweedFS ermöglicht jedoch nur die Transaktion einiger Datenbanken (SQL, ArangoDB und TiKV), wenn die Umbenennungsoperation durchgeführt wird, und stellt geringere Anforderungen an die Transaktionsfähigkeit der Datenbank. Da Seaweed FS das ursprüngliche Verzeichnis oder die ursprüngliche Datei beim Kopieren von Metadaten während des Umbenennungsvorgangs nicht sperrt, können gleichzeitig die aktualisierten Daten während des Vorgangs verloren gehen.

Änderungsprotokoll

SeaweedFS generiert ein Änderungsprotokoll für alle Metadatenoperationen, und dieses Protokoll kann weiter für die Datenreplikation (siehe unten), die Betriebsprüfung und andere Funktionen verwendet werden, während JuiceFS diese Funktion noch nicht implementiert hat.

Speicher vergleich

Wie oben erwähnt, wird die Datenspeicherung von SeaweedFS durch Volume Server + Master Server implementiert, der Funktionen wie „Merged Storage“ und „Erasure Code“ von kleinen Datenblöcken unterstützt. Die Datenspeicherung von JuiceFS basiert auf dem Objektspeicherdienst, und verwandte Funktionen werden auch von dem vom Benutzer ausgewählten Objektspeicher bereitgestellt.

Datei splitten

Beim Speichern von Daten teilen sowohl SeaweedFS als auch JuiceFS die Datei in mehrere kleine Blöcke auf und speichern sie im zugrunde liegenden Datensystem. SeaweedFS teilt Dateien in 8-MB-Blöcke auf und speichert bei sehr großen Dateien (mehr als 8 GB) auch den Chunk-Index im zugrunde liegenden Datensystem. JuiceFS wird zuerst in einen 64-MB-Chunk und dann in ein 4-MB-Objekt zerlegt.Durch das Konzept eines internen Slice wird die Leistung von zufälligem Schreiben, sequentiellem Lesen und wiederholtem Schreiben optimiert. (Einzelheiten finden Sie unter Verarbeitungsablauf für Clearing-Anforderungen lesen )

Hierarchische Speicherung

Für neu erstellte Volumes speichert SeaweedFS Daten lokal, während SeaweedFS für ältere Volumes das Hochladen in die Cloud unterstützt, um heiße und kalte Daten zu trennen . Dabei ist JuiceFS auf externe Dienste angewiesen.

Datenkompression

JuiceFS unterstützt die Verwendung von LZ4 oder ZStandard, um alle geschriebenen Daten zu komprimieren, während SeaweedFS wählt, ob entsprechend der Erweiterung und dem Dateityp der geschriebenen Datei komprimiert werden soll.

Speicherverschlüsselung

JuiceFS unterstützt die Verschlüsselung während der Übertragung (Encryption in Transit) und die Verschlüsselung im Ruhezustand (Encryption at Rest). Wenn der Benutzer die statische Verschlüsselung aktiviert, muss der Benutzer einen selbstverwalteten Schlüssel übergeben, und alle geschriebenen Daten basieren auf diesem Schlüssel . Einzelheiten finden Sie unter „ Datenverschlüsselung “.

SeaweedFS unterstützt auch die Verschlüsselung während der Übertragung und die Verschlüsselung im Ruhezustand. Nachdem die Datenverschlüsselung aktiviert wurde, werden alle auf den Volume-Server geschriebenen Daten mit einem Zufallsschlüssel verschlüsselt, und die entsprechenden Zufallsschlüsselinformationen werden vom „Filer“ verwaltet, der die „Metadaten“ verwaltet.

Zugangsvereinbarung

POSIX-Kompatibilität

JuiceFS ist voll kompatibel mit POSIX , während SeaweedFS nur teilweise POSIX-kompatibel ist ( "Issue 1558" und Wiki ), und die Funktion wird noch verbessert.

S3-Protokoll

JuiceFS implementiert die Funktion des S3-Gateways über das MinIO S3-Gateway . Es bietet eine S3-kompatible RESTful-API für Dateien in JuiceFS und kann s3cmd, AWS CLI, MinIO Client (mc) und andere Tools verwenden, um auf JuiceFS gespeicherte Dateien zu verwalten, wenn das Mounten unpraktisch ist.

SeaweedFS unterstützt derzeit etwa 20 S3-APIs, die häufig verwendete Anforderungen wie Lesen, Schreiben, Abfragen und Löschen abdecken, und hat auch funktionale Erweiterungen für einige spezifische Anforderungen (z. B. Lesen) vorgenommen.Weitere Informationen finden Sie unter Amazon-S3- API .

WebDAV-Protokoll

Sowohl JuiceFS als auch SeaweedFS unterstützen das WebDAV-Protokoll.

HDFS-Kompatibilität

JuiceFS ist vollständig kompatibel mit der HDFS-API . Nicht nur kompatibel mit Hadoop 2.x und Hadoop 3.x, sondern auch kompatibel mit verschiedenen Komponenten im Hadoop-Ökosystem. SeaweedFS bietet grundlegende Kompatibilität mit der HDFS-API , unterstützt jedoch einige Operationen noch nicht (wie Turncate, Concat, Prüfsumme und erweiterte Attribute usw.).

CSI-Treiber

Sowohl JuiceFS als auch SeaweedFS bieten „Kubernetes CSI Driver“, um Benutzern bei der Verwendung des entsprechenden Dateisystems im Kubernetes-Ökosystem zu helfen.

Erweiterungen

Client-Cache

JuiceFS verfügt über eine Vielzahl von Client-seitigen Caching-Strategien, die alle Teile von Metadaten bis Daten-Caching abdecken und es Benutzern ermöglichen, ihre eigenen Anwendungsszenarien anzupassen ( Details ), während SeaweedFS keine clientseitigen Caching-Funktionen hat.

Cluster-Datenreplikation

Für die Datenreplikation zwischen mehreren Clustern unterstützt SeaweedFS zwei asynchrone Replikationsmodi, "Aktiv-Aktiv" und "Aktiv-Passiv". Beide Modi erreichen Konsistenz zwischen Daten in verschiedenen Clustern, indem sie das Änderungsprotokoll übergeben und den Mechanismus für jedes Änderungsprotokoll erneut anwenden eine Signaturinformation, um sicherzustellen, dass dieselbe Änderung nicht mehrmals durchlaufen wird. Im Aktiv-Aktiv-Modus mit mehr als 2 Knoten im Cluster unterliegen einige Operationen von SeaweedFS (z. B. das Umbenennen von Verzeichnissen) einigen Einschränkungen.

JuiceFS unterstützt die Datensynchronisierung zwischen Clustern nicht nativ und muss sich auf die eigenen Datenreplikationsfunktionen der Metadaten-Engine und des Objektspeichers verlassen.

Daten-Cache in der Cloud

SeaweedFS kann als Cache für die Objektspeicherung in der Cloud verwendet werden und unterstützt das manuelle Vorwärmen von Daten durch Befehle. Änderungen an zwischengespeicherten Daten werden asynchron mit dem Objektspeicher synchronisiert. JuiceFS muss Dateien im Objektspeicher in Blöcken speichern und unterstützt noch keine Caching-Beschleunigung für Daten, die sich bereits im Objektspeicher befinden.

Papierkorb

JuiceFS aktiviert standardmäßig die Papierkorbfunktion, die die vom Benutzer gelöschten Dateien automatisch in das .trash-Verzeichnis unter dem JuiceFS-Stammverzeichnis verschiebt und die Daten für eine bestimmte Zeit aufbewahrt, bevor die Daten bereinigt werden . SeaweedFS unterstützt diese Funktion noch nicht.

Betriebs- und Wartungstool

JuiceFS bietet zwei Unterbefehle, Juciefs Stats und Juicefs Profile, mit denen Benutzer die aktuellen Leistungsindikatoren für einen bestimmten Zeitraum in Echtzeit anzeigen oder wiedergeben können. Gleichzeitig entwickelt JuiceFS auch die Metrikschnittstelle extern, und Benutzer können Überwachungsdaten einfach mit Prometheus und Grafana verbinden.

SeaweedFS realisiert zwei Möglichkeiten, Prometheus und Grafana gleichzeitig zu verbinden , Push und Pull , und bietet ein interaktives Tool der Weed-Shell , um Benutzern die Durchführung einer Reihe von Betriebs- und Wartungsaufgaben zu erleichtern (z. B. Anzeigen des aktuellen Clusterstatus, Auflisten von Dateilisten). , usw.).

andere

  • In Bezug auf die Veröffentlichungszeit wurde SeaweedFS im April 2015 veröffentlicht und hat derzeit insgesamt 16,4.000 Sterne, während JuiceFS im Januar 2021 veröffentlicht wurde und bisher insgesamt 7,3.000 Sterne hat.

  • In Bezug auf Projekte verwenden sowohl JuiceFS als auch SeaweedFS die kommerziell freundlichere Apache-Lizenz 2.0. SeaweedFS wird hauptsächlich von Chris Lu gepflegt, während JuiceFS hauptsächlich von Juicedata gepflegt wird.

  • Sowohl JuiceFS als auch SeaweedFS sind in Go-Sprache geschrieben.

Vergleichsliste

AlgenFS JuiceFS
Metadaten mehrmotorig mehrmotorig
Atomarität von Metadatenoperationen nicht garantiert Garantiert durch Datenbanktransaktionen
Änderungsprotokoll haben keiner
Datenspeicher Enthalten externer Dienst
Löschcode Unterstützung Verlassen Sie sich auf externe Dienste
Daten zusammenführen Unterstützung Verlassen Sie sich auf externe Dienste
Datei splitten 8MB 64 MB + 4 MB
Hierarchische Speicherung Unterstützung Verlassen Sie sich auf externe Dienste
Datenkompression Unterstützt (je nach Erweiterung) Unterstützung (globale Einstellung)
Speicherverschlüsselung Unterstützung Unterstützung
POSIX-Kompatibilität Basic ganz
S3-Protokoll Basic Basic
WebDAV-Protokoll Unterstützung Unterstützung
HDFS-Kompatibilität Basic ganz
CSI-Treiber Unterstützung Unterstützung
Client-Cache nicht unterstützt Unterstützung
Cluster-Datenreplikation Zwei-Wege-asynchron, Multi-Mode nicht unterstützt
Daten-Cache in der Cloud Unterstützung (manuelle Synchronisierung) nicht unterstützt
Papierkorb nicht unterstützt Unterstützung
Betriebs- und Wartungstool liefern liefern
Veröffentlichkeitsdatum 2015.4 2021.1
Hauptbetreuer Persönlich (Chris Lu) Unternehmen (Juicedata Inc)
Sprache Gehen Gehen
Open-Source-Vereinbarung Apache-Lizenz 2.0 Apache-Lizenz 2.0

Wenn Sie hilfreich sind, beachten Sie bitte unser Projekt Juicedata/JuiceFS ! (0ᴗ0✿)

{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/5389802/blog/7634308
Empfohlen
Rangfolge