Creazione di un cluster Milvus basato su JuiceFS
Le collaborazioni tra comunità open-source sono qualcosa di magico. Non solo volontari appassionati, intelligenti e creativi mantengono innovative le soluzioni open-source, ma lavorano anche per unire strumenti diversi in modi interessanti e utili. Milvus, il database vettoriale più popolare al mondo, e JuiceFS, un file system condiviso progettato per ambienti cloud-native, sono stati uniti in questo spirito dalle rispettive comunità open-source. Questo articolo spiega cos'è JuiceFS, come creare un cluster Milvus basato sull'archiviazione di file condivisa JuiceFS e le prestazioni che gli utenti possono aspettarsi utilizzando questa soluzione.
Cos'è JuiceFS?
JuiceFS è un file system POSIX distribuito open-source ad alte prestazioni, che può essere costruito sopra Redis e S3. È stato progettato per ambienti cloud-native e supporta la gestione, l'analisi, l'archiviazione e il backup di dati di qualsiasi tipo. JuiceFS è comunemente utilizzato per risolvere sfide legate ai big data, creare applicazioni di intelligenza artificiale (AI) e raccogliere log. Il sistema supporta anche la condivisione dei dati tra più client e può essere utilizzato direttamente come storage condiviso in Milvus.
Dopo che i dati, e i relativi metadati, sono stati resi persistenti rispettivamente nello storage a oggetti e in Redis, JuiceFS funge da middleware stateless. La condivisione dei dati si realizza consentendo a diverse applicazioni di interfacciarsi perfettamente tra loro tramite un'interfaccia standard di file system. JuiceFS si basa su Redis, un archivio dati in memoria open-source, per l'archiviazione dei metadati. Redis viene utilizzato perché garantisce l'atomicità e fornisce operazioni sui metadati ad alte prestazioni. Tutti i dati vengono archiviati nello storage a oggetti tramite il client JuiceFS. Il diagramma dell'architettura è il seguente:
Architettura complessiva di JuiceFS.
Creare un cluster Milvus basato su JuiceFS
Un cluster Milvus creato con JuiceFS (vedi il diagramma dell'architettura qui sotto) funziona suddividendo le richieste upstream tramite Mishards, un middleware di sharding del cluster, per propagare le richieste ai suoi sottomoduli. Quando si inseriscono dati, Mishards assegna le richieste upstream al nodo di scrittura Milvus, che archivia i dati appena inseriti in JuiceFS. Durante la lettura dei dati, Mishards carica i dati da JuiceFS tramite un nodo di lettura Milvus in memoria per l'elaborazione, quindi raccoglie e restituisce i risultati dai sottoservizi upstream.
Architettura del cluster Milvus creato con JuiceFS.
Passaggio 1: Avviare il servizio MySQL
Avvia il servizio MySQL su qualsiasi nodo del cluster. Per i dettagli, consulta Gestire i metadati con MySQL.
Passaggio 2: Creare un file system JuiceFS
A scopo dimostrativo, viene utilizzato il programma binario precompilato JuiceFS. Scarica il pacchetto di installazione corretto per il tuo sistema e segui la Guida rapida di JuiceFS per istruzioni dettagliate sull'installazione. Per creare un file system JuiceFS, configura innanzitutto un database Redis per l'archiviazione dei metadati. Si consiglia, per le distribuzioni su cloud pubblico, di ospitare il servizio Redis sullo stesso cloud dell'applicazione. Inoltre, configura lo storage a oggetti per JuiceFS. In questo esempio viene utilizzato Azure Blob Storage; tuttavia, JuiceFS supporta quasi tutti i servizi a oggetti. Seleziona il servizio di storage a oggetti più adatto alle esigenze del tuo scenario.
Dopo aver configurato il servizio Redis e lo storage a oggetti, formatta un nuovo file system e monta JuiceFS nella directory locale:
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
Se il server Redis non è in esecuzione localmente, sostituisci localhost con il seguente indirizzo:
redis://<user:password>@host:6379/1.
Quando l'installazione riesce, JuiceFS restituisce la pagina di archiviazione condivisa /root/jfs.
Installazione riuscita.
Passaggio 3: Avvia Milvus
Tutti i nodi nel cluster devono avere Milvus installato, e ogni nodo Milvus deve essere configurato con autorizzazione di lettura o scrittura. Solo un nodo Milvus può essere configurato come nodo di scrittura, e il resto deve essere costituito da nodi di lettura. Per prima cosa, imposta i parametri delle sezioni cluster e general nel file di configurazione di sistema di Milvus server_config.yaml:
Sezione cluster
| Parametro | Descrizione | Configurazione |
|---|---|---|
enable | Se abilitare la modalità cluster | true |
role | Ruolo di distribuzione di Milvus | rw/ro |
Sezione 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
Durante l'installazione, il percorso di archiviazione condivisa JuiceFS configurato è impostato come /root/jfs/milvus/db.
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
Al termine dell'installazione, avvia Milvus e conferma che sia stato avviato correttamente. Infine, avvia il servizio Mishards su uno qualsiasi dei nodi nel cluster. L'immagine seguente mostra un avvio riuscito di Mishards. Per ulteriori informazioni, fai riferimento al tutorial su GitHub.
Avvio riuscito di Mishards.
Benchmark delle prestazioni
Le soluzioni di archiviazione condivisa sono solitamente implementate da sistemi di archiviazione collegati alla rete (NAS). I tipi di sistemi NAS comunemente utilizzati includono Network File System (NFS) e Server Message Block (SMB). Le piattaforme cloud pubbliche generalmente forniscono servizi di archiviazione gestiti compatibili con questi protocolli, come Amazon Elastic File System (EFS).
A differenza dei sistemi NAS tradizionali, JuiceFS è implementato basandosi su Filesystem in Userspace (FUSE), dove tutta la lettura e scrittura dei dati avviene direttamente lato applicazione, riducendo ulteriormente la latenza di accesso. Esistono anche funzionalità uniche di JuiceFS che non si trovano in altri sistemi NAS, come la compressione e la cache dei dati.
I test di benchmark rivelano che JuiceFS offre importanti vantaggi rispetto a EFS. Nel benchmark dei metadati (Figura 1), JuiceFS registra operazioni di I/O al secondo (IOPS) fino a dieci volte superiori rispetto a EFS. Inoltre, il benchmark della velocità effettiva di I/O (Figura 2) mostra che JuiceFS supera EFS sia negli scenari a singolo job sia in quelli multi-job.
Figura 1. Benchmark dei metadati.
Figura 2. Benchmark di lettura/scrittura sequenziale.
Inoltre, i test di benchmark mostrano che il tempo di recupero della prima query, ovvero il tempo per caricare i dati appena inseriti dal disco alla memoria, per il cluster Milvus basato su JuiceFS è in media di soli 0,032 secondi, indicando che i dati vengono caricati dal disco alla memoria quasi istantaneamente. Per questo test, il tempo di recupero della prima query viene misurato utilizzando un milione di righe di dati vettoriali a 128 dimensioni inserite in batch da 100k a intervalli da 1 a 8 secondi.
JuiceFS è un sistema di archiviazione file condiviso stabile e affidabile, e il cluster Milvus costruito su JuiceFS offre sia alte prestazioni sia una capacità di archiviazione flessibile.
Scopri di più su Milvus
Milvus è uno strumento potente in grado di alimentare una vasta gamma di applicazioni di intelligenza artificiale e di ricerca per similarità vettoriale. Per saperne di più sul progetto, consulta le seguenti risorse:
- Leggi il nostro blog.
- Interagisci con la nostra community open-source su Slack.
- Usa o contribuisci al database vettoriale più popolare al mondo su GitHub.
- Testa e distribuisci rapidamente applicazioni di IA con il nostro nuovo bootcamp.
Biografia di Changjian Gao.
Biografia di Jingjing Jia.
Continua a leggere

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.



