🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI

Was ist JuiceFS?

  • Engineering
June 15, 2021
Changjian Gao and Jingjing Jia

Die Zusammenarbeit zwischen Open-Source-Gemeinschaften ist eine magische Sache. Leidenschaftliche, intelligente und kreative Freiwillige sorgen nicht nur dafür, dass Open-Source-Lösungen innovativ bleiben, sondern auch dafür, dass verschiedene Tools auf interessante und nützliche Weise zusammengeführt werden. Milvus, die weltweit beliebteste Vektordatenbank, und JuiceFS, ein gemeinsam genutztes Dateisystem für Cloud-native Umgebungen, wurden von ihren jeweiligen Open-Source-Gemeinschaften in diesem Sinne zusammengeführt. In diesem Artikel wird erklärt, was JuiceFS ist, wie man einen Milvus-Cluster auf der Grundlage des gemeinsamen Dateispeichers JuiceFS aufbaut und welche Leistung die Benutzer von dieser Lösung erwarten können.

Was ist JuiceFS?

JuiceFS ist ein leistungsstarkes, quelloffenes, verteiltes POSIX-Dateisystem, das auf Redis und S3 aufgebaut werden kann. Es wurde für Cloud-native Umgebungen entwickelt und unterstützt das Verwalten, Analysieren, Archivieren und Sichern von Daten jeglicher Art. JuiceFS wird häufig für die Lösung von Big-Data-Herausforderungen, den Aufbau von Anwendungen für künstliche Intelligenz (KI) und die Protokollerfassung verwendet. Das System unterstützt auch die gemeinsame Nutzung von Daten durch mehrere Clients und kann direkt als gemeinsamer Speicher in Milvus verwendet werden.

Nachdem die Daten und die zugehörigen Metadaten im Objektspeicher bzw. in Redis persistiert wurden, dient JuiceFS als zustandslose Middleware. Die gemeinsame Nutzung von Daten wird dadurch realisiert, dass verschiedene Anwendungen über eine Standard-Dateisystemschnittstelle nahtlos aneinander andocken können. JuiceFS nutzt Redis, einen Open-Source-In-Memory-Datenspeicher, für die Speicherung von Metadaten. Redis wird verwendet, weil es Atomarität garantiert und hochleistungsfähige Metadatenoperationen bietet. Alle Daten werden über den JuiceFS-Client im Objektspeicher gespeichert. Das Architekturdiagramm sieht wie folgt aus:

juicefs-architecture.png juicefs-architecture.png

Aufbau eines Milvus-Clusters auf der Grundlage von JuiceFS

Ein mit JuiceFS aufgebauter Milvus-Cluster (siehe nachstehendes Architekturdiagramm) funktioniert durch die Aufteilung von Upstream-Anforderungen mithilfe von Mishards, einer Cluster-Sharding-Middleware, um die Anforderungen kaskadenförmig an seine Untermodule weiterzuleiten. Beim Einfügen von Daten weist Mishards vorgelagerte Anforderungen dem Milvus-Schreibknoten zu, der neu eingefügte Daten in JuiceFS speichert. Beim Lesen von Daten lädt Mishards die Daten aus dem JuiceFS über einen Milvus-Leseknoten zur Verarbeitung in den Speicher und sammelt dann die Ergebnisse der vorgelagerten Teildienste und gibt sie zurück.

milvus-cluster-built-with-juicefs.png milvus-cluster-built-mit-juicefs.png

Schritt 1: Starten des MySQL-Dienstes

Starten Sie den MySQL-Dienst auf einem beliebigen Knoten des Clusters. Einzelheiten finden Sie unter Verwalten von Metadaten mit MySQL.

Schritt 2: Erstellen eines JuiceFS-Dateisystems

Zu Demonstrationszwecken wird das vorkompilierte Binärprogramm JuiceFS verwendet. Laden Sie das richtige Installationspaket für Ihr System herunter und befolgen Sie die JuiceFS-Kurzanleitung für detaillierte Installationsanweisungen. Um ein JuiceFS-Dateisystem zu erstellen, richten Sie zunächst eine Redis-Datenbank für die Speicherung von Metadaten ein. Es wird empfohlen, den Redis-Dienst bei Public Cloud-Bereitstellungen in derselben Cloud wie die Anwendung zu hosten. Richten Sie außerdem einen Objektspeicher für JuiceFS ein. In diesem Beispiel wird Azure Blob Storage verwendet; JuiceFS unterstützt jedoch fast alle Objektdienste. Wählen Sie den Objektspeicherdienst, der den Anforderungen Ihres Szenarios am besten entspricht.

Nachdem Sie den Redis-Dienst und den Objektspeicher konfiguriert haben, formatieren Sie ein neues Dateisystem und hängen JuiceFS in das lokale Verzeichnis ein:

1 $  export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
2 $ ./juicefs format \
3     --storage wasb \
4     --bucket https://<container> \
5     ... \
6     localhost test #format
7 $ ./juicefs mount -d localhost ~/jfs  #mount
8

Wenn der Redis-Server nicht lokal ausgeführt wird, ersetzen Sie localhost durch die folgende Adresse: redis://<user:password>@host:6379/1.

Wenn die Installation erfolgreich war, gibt JuiceFS die Seite des gemeinsamen Speichers /root/jfs zurück.

installation-success.png installation-success.png

Schritt 3: Starten Sie Milvus

Auf allen Knoten des Clusters sollte Milvus installiert sein, und jeder Milvus-Knoten sollte mit Lese- oder Schreibberechtigung konfiguriert sein. Nur ein Milvus-Knoten kann als Schreibknoten konfiguriert werden, die anderen müssen Leseknoten sein. Setzen Sie zunächst die Parameter der Abschnitte cluster und general in der Milvus-Systemkonfigurationsdatei server_config.yaml:

Abschnitt cluster

ParameterBeschreibungKonfiguration
enableOb der Clustermodus aktiviert werden solltrue
roleMilvus-Bereitstellungsrollerw/ro

Abschnitt general

# meta_uri is the URI for metadata storage, using MySQL (for Milvus Cluster). Format: mysql://<username:password>@host:port/database
general:
  timezone: UTC+8
  meta_uri: mysql://root:milvusroot@host:3306/milvus

Während der Installation wird der gemeinsam genutzte JuiceFS-Speicherpfad auf /root/jfs/milvus/db festgelegt.

1 sudo docker run -d --name milvus_gpu_1.0.0 --gpus all \
2 -p 19530:19530 \
3 -p 19121:19121 \
4 -v /root/jfs/milvus/db:/var/lib/milvus/db \  #/root/jfs/milvus/db is the shared storage path
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf \
6 -v /home/$USER/milvus/logs:/var/lib/milvus/logs \
7 -v /home/$USER/milvus/wal:/var/lib/milvus/wal \
8 milvusdb/milvus:1.0.0-gpu-d030521-1ea92e
9

Starten Sie nach Abschluss der Installation Milvus und vergewissern Sie sich, dass es ordnungsgemäß gestartet wurde. Starten Sie anschließend den Mishards-Dienst auf einem der Knoten im Cluster. Das folgende Bild zeigt einen erfolgreichen Start von Mishards. Weitere Informationen finden Sie in der GitHub-Anleitung.

mishards-launch-success.png mishards-launch-erfolgreich.png

Leistungs-Benchmarks

Gemeinsame Speicherlösungen werden in der Regel durch Network-Attached-Storage-Systeme (NAS) implementiert. Zu den häufig verwendeten NAS-Systemtypen gehören Network File System (NFS) und Server Message Block (SMB). Öffentliche Cloud-Plattformen bieten im Allgemeinen verwaltete Speicherdienste an, die mit diesen Protokollen kompatibel sind, wie z. B. Amazon Elastic File System (EFS).

Im Gegensatz zu herkömmlichen NAS-Systemen ist JuiceFS auf der Grundlage von FUSE (Filesystem in Userspace) implementiert, wobei alle Lese- und Schreibvorgänge direkt auf der Anwendungsseite stattfinden, was die Zugriffslatenz weiter verringert. JuiceFS verfügt außerdem über einzigartige Funktionen, die in anderen NAS-Systemen nicht zu finden sind, wie z. B. Datenkomprimierung und Caching.

Benchmark-Tests zeigen, dass JuiceFS erhebliche Vorteile gegenüber EFS bietet. Im Metadaten-Benchmark (Abbildung 1) verzeichnet JuiceFS bis zu zehnmal höhere E/A-Operationen pro Sekunde (IOPS) als EFS. Außerdem zeigt der E/A-Durchsatz-Benchmark (Abbildung 2), dass JuiceFS sowohl in Einzel- als auch in Multi-Job-Szenarien besser abschneidet als EFS.

performance-benchmark-1.png leistung-benchmark-1.png

performance-benchmark-2.png leistung-benchmark-2.png

Darüber hinaus zeigen die Benchmark-Tests, dass die Zeit für die erste Abfrage, d. h. die Zeit zum Laden neu eingefügter Daten von der Festplatte in den Speicher, für den JuiceFS-basierten Milvus-Cluster im Durchschnitt nur 0,032 Sekunden beträgt, was darauf hindeutet, dass die Daten fast sofort von der Festplatte in den Speicher geladen werden. Für diesen Test wurde die Abrufzeit für die erste Abfrage mit einer Million Zeilen 128-dimensionaler Vektordaten gemessen, die in Stapeln von 100k in Intervallen von 1 bis 8 Sekunden eingefügt wurden.

JuiceFS ist ein stabiles und zuverlässiges gemeinsames Dateispeichersystem, und der auf JuiceFS aufgebaute Milvus-Cluster bietet sowohl hohe Leistung als auch flexible Speicherkapazität.

Erfahren Sie mehr über Milvus

Milvus ist ein leistungsstarkes Tool, das eine Vielzahl von Anwendungen für künstliche Intelligenz und Vektorähnlichkeitssuche unterstützt. Wenn Sie mehr über das Projekt erfahren möchten, lesen Sie die folgenden Ressourcen:

  • Lesen Sie unseren Blog.
  • Interagieren Sie mit unserer Open-Source-Community auf Slack.
  • Nutzen Sie die beliebteste Vektordatenbank der Welt auf GitHub oder tragen Sie zu ihr bei.
  • Testen und implementieren Sie KI-Anwendungen schnell mit unserem neuen Bootcamp.

writer bio-changjian gao.png Autor bio-changjian gao.png writer bio-jingjing jia.pngAutor bio-jingjing jia.png

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Weiterlesen