🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI

Che cos'è JuiceFS?

  • Engineering
June 15, 2021
Changjian Gao and Jingjing Jia

Le collaborazioni tra le comunità open-source sono una cosa magica. Non solo i 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ù diffuso 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 costruire un cluster Milvus basato sullo storage di file condivisi JuiceFS e le prestazioni che gli utenti possono aspettarsi utilizzando questa soluzione.

Che 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-nativi e supporta la gestione, l'analisi, l'archiviazione e il backup di dati di qualsiasi tipo. JuiceFS è comunemente usato per risolvere le sfide dei big data, per costruire applicazioni di intelligenza artificiale (AI) e per la raccolta dei 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 memorizzati rispettivamente su object storage e Redis, JuiceFS funge da middleware stateless. La condivisione dei dati è realizzata consentendo alle diverse applicazioni di collegarsi l'una all'altra senza problemi attraverso un'interfaccia standard del file system. JuiceFS si affida a Redis, un data store in-memory open-source, per la memorizzazione dei metadati. Redis viene utilizzato perché garantisce l'atomicità e fornisce operazioni sui metadati ad alte prestazioni. Tutti i dati sono memorizzati in un archivio di oggetti attraverso il client JuiceFS. Il diagramma dell'architettura è il seguente:

juicefs-architecture.png juicefs-architecture.png

Costruire un cluster Milvus basato su JuiceFS

Un cluster Milvus costruito con JuiceFS (si veda il diagramma dell'architettura qui sotto) funziona dividendo le richieste a monte utilizzando Mishards, un middleware di sharding del cluster, per distribuire le richieste a cascata ai suoi sottomoduli. Quando si inseriscono dati, Mishards alloca le richieste a monte al nodo di scrittura Milvus, che memorizza i dati appena inseriti in JuiceFS. Quando legge i dati, Mishards li carica da JuiceFS attraverso un nodo di lettura Milvus nella memoria per l'elaborazione, quindi raccoglie e restituisce i risultati dai sottoservizi a monte.

milvus-cluster-built-with-juicefs.png milvus-cluster-costruito-con-juicefs.png

Passo 1: Avviare il servizio MySQL

Avviare il servizio MySQL su qualsiasi nodo del cluster. Per maggiori dettagli, vedere Gestire i metadati con MySQL.

Passo 2: creare un file system JuiceFS

A scopo dimostrativo, viene utilizzato il programma binario precompilato JuiceFS. Scaricate il pacchetto di installazione corretto per il vostro sistema e seguite la Guida rapida di JuiceFS per istruzioni dettagliate sull'installazione. Per creare un file system JuiceFS, impostare prima un database Redis per l'archiviazione dei metadati. Per le distribuzioni su cloud pubblico, si consiglia di ospitare il servizio Redis sullo stesso cloud dell'applicazione. Inoltre, configurare lo storage di oggetti per JuiceFS. In questo esempio viene utilizzato Azure Blob Storage, ma JuiceFS supporta quasi tutti i servizi a oggetti. Selezionare il servizio di archiviazione a oggetti più adatto alle esigenze del proprio scenario.

Dopo aver configurato il servizio Redis e l'archiviazione a oggetti, formattare un nuovo file system e montare 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, sostituire localhost con il seguente indirizzo: redis://<user:password>@host:6379/1.

Quando l'installazione riesce, JuiceFS restituisce la pagina di storage condiviso /root/jfs.

installation-success.png installazione-successo.png

Passo 3: Avviare Milvus

Tutti i nodi del cluster devono avere installato Milvus e ogni nodo Milvus deve essere configurato con i permessi di lettura o scrittura. Solo un nodo Milvus può essere configurato come nodo di scrittura, mentre gli altri devono essere nodi di lettura. Per prima cosa, impostare i parametri delle sezioni cluster e general nel file di configurazione del sistema Milvus server_config.yaml:

Sezione cluster

ParametroDescrizioneConfigurazione
enableSe abilitare la modalità clustertrue
roleRuolo di distribuzione Milvusrw/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 è /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, avviare Milvus e verificare che sia stato lanciato correttamente. Infine, avviare il servizio Mishards su uno qualsiasi dei nodi del cluster. L'immagine seguente mostra un avvio riuscito di Mishards. Per ulteriori informazioni, consultare l'esercitazione su GitHub.

mishards-launch-success.png mishards-lancio-successo.png

Parametri di riferimento delle prestazioni

Le soluzioni di storage condiviso sono solitamente implementate da sistemi NAS (Network Attached Storage). I tipi di sistemi NAS comunemente utilizzati includono Network File System (NFS) e Server Message Block (SMB). Le piattaforme cloud pubbliche forniscono generalmente servizi di archiviazione gestiti compatibili con questi protocolli, come Amazon Elastic File System (EFS).

A differenza dei sistemi NAS tradizionali, JuiceFS è implementato sulla base di Filesystem in Userspace (FUSE), dove tutte le operazioni di lettura e scrittura dei dati avvengono direttamente sul lato dell'applicazione, riducendo ulteriormente la latenza di accesso. JuiceFS presenta inoltre caratteristiche esclusive che non si trovano in altri sistemi NAS, come la compressione dei dati e la cache.

I test di benchmark rivelano che JuiceFS offre notevoli 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 del throughput I/O (Figura 2) mostra che JuiceFS supera EFS in scenari sia a singolo che a multiplo lavoro.

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

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

Inoltre, i test di benchmark mostrano che il tempo di recupero della prima query, o il tempo per caricare i dati appena inseriti dal disco alla memoria, per il cluster Milvus basato su JuiceFS è di soli 0,032 secondi in media, indicando che i dati vengono caricati dal disco alla memoria quasi istantaneamente. Per questo test, il tempo di recupero della prima query è stato misurato utilizzando un milione di righe di dati vettoriali a 128 dimensioni inseriti in batch di 100k a intervalli di 1-8 secondi.

JuiceFS è un sistema di archiviazione file condiviso stabile e affidabile e il cluster Milvus costruito su JuiceFS offre prestazioni elevate e capacità di archiviazione flessibile.

Per saperne di più su Milvus

Milvus è uno strumento potente in grado di alimentare una vasta gamma di applicazioni di intelligenza artificiale e di ricerca di similarità vettoriale. Per saperne di più sul progetto, consultate le seguenti risorse:

  • Leggete il nostro blog.
  • Interagire con la nostra comunità open-source su Slack.
  • Utilizzate o contribuite al database vettoriale più diffuso al mondo su GitHub.
  • Testate e distribuite rapidamente le applicazioni AI con il nostro nuovo bootcamp.

writer bio-changjian gao.png bio scrittore-changjian gao.png writer bio-jingjing jia.pngbio scrittore-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

Continua a Leggere