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

milvus-logo
LFAI
  • Home
  • Blog
  • Ottimizzare la comunicazione dei dati: Milvus abbraccia la messaggistica NATS

Ottimizzare la comunicazione dei dati: Milvus abbraccia la messaggistica NATS

  • Engineering
November 24, 2023
Zhen Ye

Nell'intricato arazzo dell'elaborazione dei dati, la comunicazione continua è il filo conduttore delle operazioni. Milvus, l'innovativo database vettoriale open-source, ha intrapreso un viaggio di trasformazione con la sua ultima funzione: l'integrazione della messaggistica NATS. In questo esauriente post del blog, sveleremo le complessità di questa integrazione, esplorando le sue caratteristiche principali, il processo di configurazione, i vantaggi della migrazione e come si colloca rispetto al suo predecessore, RocksMQ.

Capire il ruolo delle code di messaggi in Milvus

Nell'architettura cloud-native di Milvus, la coda di messaggi, o Log Broker, ha un'importanza fondamentale. È la spina dorsale che garantisce flussi di dati persistenti, sincronizzazione, notifiche di eventi e integrità dei dati durante i ripristini del sistema. Tradizionalmente, RocksMQ era la scelta più semplice in Milvus Standalone, soprattutto se confrontato con Pulsar e Kafka, ma i suoi limiti diventavano evidenti con dati estesi e scenari complessi.

Milvus 2.3 introduce NATS, un'implementazione MQ a singolo nodo che ridefinisce il modo di gestire i flussi di dati. A differenza dei suoi predecessori, NATS libera gli utenti di Milvus dai vincoli delle prestazioni, offrendo un'esperienza senza soluzione di continuità nella gestione di grandi volumi di dati.

Che cos'è NATS?

NATS è una tecnologia di connettività di sistema distribuita implementata in Go. Supporta varie modalità di comunicazione come Request-Reply e Publish-Subscribe tra i sistemi, fornisce la persistenza dei dati attraverso JetStream e offre funzionalità distribuite attraverso RAFT integrato. Per una comprensione più dettagliata di NATS, si può fare riferimento al sito ufficiale di NATS.

In Milvus 2.3 Standalone, NATS, JetStream e PubSub forniscono a Milvus solide funzionalità MQ.

Abilitazione di NATS

Milvus 2.3 offre una nuova opzione di controllo, mq.type, che consente agli utenti di specificare il tipo di MQ che si desidera utilizzare. Per abilitare NATS, impostate mq.type=natsmq. Se dopo l'avvio delle istanze di Milvus vengono visualizzati log simili a quelli riportati di seguito, significa che è stato abilitato NATS come coda di messaggi.

[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]

Configurazione di NATS per Milvus

Le opzioni di personalizzazione di NATS includono la specificazione della porta di ascolto, della directory di archiviazione di JetStream, della dimensione massima del payload e del timeout di inizializzazione. La messa a punto di queste impostazioni garantisce prestazioni e affidabilità ottimali.

natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.

Nota:

  • È necessario specificare server.port per l'ascolto del server NATS. Se c'è un conflitto di porte, Milvus non può avviarsi. Impostate server.port=-1 per selezionare casualmente una porta.

  • storeDir specifica la directory per l'archiviazione di JetStream. Si consiglia di memorizzare la directory in un'unità a stato solido (SSD) ad alte prestazioni per migliorare la velocità di lettura/scrittura di Milvus.

  • maxFileStore imposta il limite superiore della dimensione di archiviazione di JetStream. Il superamento di questo limite impedisce la scrittura di ulteriori dati.

  • maxPayload limita la dimensione dei singoli messaggi. Si consiglia di mantenerla al di sopra dei 5 MB per evitare che la scrittura venga rifiutata.

  • initializeTimeoutcontrolla il timeout di avvio del server NATS.

  • monitor configura i registri indipendenti di NATS.

  • retention controlla il meccanismo di conservazione dei messaggi NATS.

Per ulteriori informazioni, consultare la documentazione ufficiale di NATS.

Migrazione da RocksMQ a NATS

La migrazione da RocksMQ a NATS è un processo senza soluzione di continuità che prevede passaggi come l'interruzione delle operazioni di scrittura, il flussaggio dei dati, la modifica delle configurazioni e la verifica della migrazione attraverso i log di Milvus.

  1. Prima di iniziare la migrazione, interrompere tutte le operazioni di scrittura in Milvus.

  2. Eseguire l'operazione FlushALL in Milvus e attendere il suo completamento. Questo passaggio assicura che tutti i dati in sospeso vengano scaricati e che il sistema sia pronto per lo spegnimento.

  3. Modificare il file di configurazione di Milvus impostando mq.type=natsmq e regolando le opzioni pertinenti nella sezione natsmq.

  4. Avviare Milvus 2.3.

  5. Eseguire il backup e la pulizia dei dati originali memorizzati nella directory rocksmq.path. (Opzionale)

NATS vs. RocksMQ: un confronto sulle prestazioni

Test delle prestazioni Pub/Sub

  • Piattaforma di test: Chip M1 Pro / Memoria: 16 GB

  • Scenario di test: Sottoscrizione e pubblicazione di pacchetti di dati casuali a un argomento ripetutamente fino alla ricezione dell'ultimo risultato pubblicato.

  • Risultati:

    • Per i pacchetti di dati più piccoli (< 64kb), RocksMQ supera NATS in termini di memoria, CPU e velocità di risposta.

    • Per i pacchetti di dati più grandi (> 64kb), NATS supera RocksMQ, offrendo tempi di risposta molto più rapidi.

Tipo di testMQnumero di operazionicosto per operazioneCosto della memoriaTempo totale della CPUCosto di archiviazione
5MB*100 Pub/SubNATS501,650328186 s/op4,29 GB85.5825G
5MB*100 Pub/SubRocksMQ502,475595131 s/op1,18 GB81.4219G
1MB*500 Pub/SubNATS502,248722593 s/op2,60 GB96.5025G
1MB*500 Pub/SubRocksMQ502.554614279 s/op614,9 MB80.1919G
64KB*10000 Pub/SubNATS502.133345262 s/op3,29 GB97.5931G
64KB*10000 Pub/SubRocksMQ503.253778195 s/op331,2 MB134.624G
1KB*50000 Pub/SubNATS502.629391004 s/op635,1 MB179.672.6G
1KB*50000 Pub/SubRocksMQ500,897638581 s/op232,3 MB60.42521M

Tabella 1: Risultati dei test sulle prestazioni Pub/Sub

Test di integrazione Milvus

Dimensione dei dati: 100M

Risultato: Nei test approfonditi con un set di dati da 100 milioni di vettori, NATS ha dimostrato una minore latenza di ricerca e di interrogazione dei vettori.

MetricheRocksMQ (ms)NATS (ms)
Latenza media di ricerca vettoriale23.5520.17
Richieste di ricerca vettoriale al secondo (RPS)2.953.07
Latenza media delle query7.26.74
Richieste di query al secondo (RPS)1.471.54

Tabella 2: Risultati del test di integrazione di Milvus con il dataset 100m

Set di dati: <100M

Risultato: Per i dataset inferiori a 100M, NATS e RocksMQ mostrano prestazioni simili.

Conclusioni: Potenziare Milvus con la messaggistica NATS

L'integrazione di NATS in Milvus segna un passo significativo nell'elaborazione dei dati. Sia che si tratti di analisi in tempo reale, di applicazioni di apprendimento automatico o di qualsiasi altra impresa ad alta intensità di dati, NATS consente ai progetti di ottenere efficienza, affidabilità e velocità. Con l'evoluzione del panorama dei dati, la presenza di un sistema di messaggistica solido come NATS all'interno di Milvus garantisce una comunicazione dei dati affidabile e ad alte prestazioni.

Like the article? Spread the word

Continua a Leggere