Optimierung der Datenkommunikation: Milvus setzt auf NATS Messaging
Im komplizierten Geflecht der Datenverarbeitung ist die nahtlose Kommunikation der Faden, der die Abläufe zusammenhält. Milvus, die bahnbrechende Open-Source-Vektordatenbank, hat sich mit ihrer neuesten Funktion auf eine transformative Reise begeben: NATS-Messaging-Integration. In diesem umfassenden Blog-Beitrag werden wir die Feinheiten dieser Integration enträtseln und ihre Kernfunktionen, den Einrichtungsprozess, die Migrationsvorteile und den Vergleich mit ihrem Vorgänger RocksMQ untersuchen.
Die Rolle von Message Queues in Milvus verstehen
In der Cloud-nativen Architektur von Milvus ist die Nachrichtenwarteschlange oder der Log Broker von zentraler Bedeutung. Sie ist das Rückgrat, das persistente Datenströme, Synchronisierung, Ereignisbenachrichtigungen und Datenintegrität bei Systemwiederherstellungen gewährleistet. Traditionell war RocksMQ die einfachste Wahl im Milvus-Standalone-Modus, insbesondere im Vergleich zu Pulsar und Kafka, aber seine Grenzen wurden bei umfangreichen Daten und komplexen Szenarien deutlich.
Mit Milvus 2.3 wird NATS eingeführt, eine Single-Node-MQ-Implementierung, die die Verwaltung von Datenströmen neu definiert. Im Gegensatz zu seinen Vorgängern befreit NATS die Milvus-Benutzer von Leistungseinschränkungen und bietet eine nahtlose Erfahrung bei der Verarbeitung großer Datenmengen.
Was ist NATS?
NATS ist eine verteilte Systemverbindungstechnologie, die in Go implementiert ist. Sie unterstützt verschiedene Kommunikationsmodi wie Request-Reply und Publish-Subscribe zwischen Systemen, bietet Datenpersistenz durch JetStream und verteilte Fähigkeiten durch eingebautes RAFT. Auf der offiziellen NATS-Website finden Sie weitere Informationen zu NATS.
Im Milvus 2.3 Standalone-Modus bieten NATS, JetStream und PubSub Milvus robuste MQ-Funktionen.
Aktivieren von NATS
Milvus 2.3 bietet eine neue Steuerungsoption, mq.type
, die es den Benutzern ermöglicht, die Art von MQ, die sie verwenden möchten, anzugeben. Um NATS zu aktivieren, setzen Sie mq.type=natsmq
. Wenn Sie nach dem Starten von Milvus-Instanzen ähnliche Protokolle wie die unten stehenden sehen, haben Sie NATS als Nachrichtenwarteschlange erfolgreich aktiviert.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
NATS für Milvus konfigurieren
Zu den NATS-Anpassungsoptionen gehören die Angabe des Listening Ports, des JetStream-Speicherverzeichnisses, der maximalen Nutzdatengröße und des Initialisierungs-Timeouts. Die Feinabstimmung dieser Einstellungen gewährleistet optimale Leistung und Zuverlässigkeit.
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.
Anmerkung:
Sie müssen
server.port
für das Abhören des NATS-Servers angeben. Wenn es einen Portkonflikt gibt, kann Milvus nicht starten. Stellen Sieserver.port=-1
so ein, dass ein Port zufällig ausgewählt wird.storeDir
gibt das Verzeichnis für die JetStream-Speicherung an. Wir empfehlen, das Verzeichnis auf einem leistungsstarken Solid-State-Laufwerk (SSD) zu speichern, um den Lese-/Schreibdurchsatz von Milvus zu verbessern.maxFileStore
legt die Obergrenze für die JetStream-Speichergröße fest. Das Überschreiten dieser Grenze verhindert das weitere Schreiben von Daten.maxPayload
begrenzt die Größe der einzelnen Nachrichten. Sie sollte über 5 MB liegen, um Schreibabweisungen zu vermeiden.initializeTimeout
steuert die Zeitüberschreitung beim Start des NATS-Servers.monitor
konfiguriert die unabhängigen Logs von NATS.retention
steuert den Aufbewahrungsmechanismus von NATS-Nachrichten.
Weitere Informationen finden Sie in der offiziellen NATS-Dokumentation.
Umstellung von RocksMQ auf NATS
Die Migration von RocksMQ zu NATS ist ein nahtloser Prozess, der Schritte wie das Stoppen von Schreibvorgängen, das Flushen von Daten, das Ändern von Konfigurationen und das Überprüfen der Migration durch Milvus-Protokolle umfasst.
Bevor Sie die Migration einleiten, stoppen Sie alle Schreibvorgänge in Milvus.
Führen Sie den Vorgang
FlushALL
in Milvus aus und warten Sie auf seinen Abschluss. Dieser Schritt stellt sicher, dass alle ausstehenden Daten geleert werden und das System zum Herunterfahren bereit ist.Ändern Sie die Milvus-Konfigurationsdatei, indem Sie
mq.type=natsmq
einstellen und die relevanten Optionen im Abschnittnatsmq
anpassen.Starten Sie den Milvus 2.3.
Sichern und bereinigen Sie die Originaldaten, die im Verzeichnis
rocksmq.path
gespeichert sind. (Optional)
NATS vs. RocksMQ: Ein Leistungsvergleich
Pub/Sub-Leistungstest
Testplattform: M1 Pro Chip / Speicher: 16GB
Test-Szenario: Wiederholtes Abonnieren und Veröffentlichen von Zufallsdatenpaketen an ein Topic, bis das letzte veröffentlichte Ergebnis empfangen wird.
Ergebnisse:
Bei kleineren Datenpaketen (< 64kb) übertrifft RocksMQ NATS in Bezug auf Speicher, CPU und Reaktionsgeschwindigkeit.
Bei größeren Datenpaketen (> 64kb) übertrifft NATS RocksMQ und bietet wesentlich schnellere Antwortzeiten.
Test Typ | MQ | Anzahl der Operationen | Kosten pro Operation | Kosten für Speicher | CPU-Gesamtzeit | Speicherkosten |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4,29 GB | 85.58 | 25G |
5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 s/op | 1,18 GB | 81.42 | 19G |
1MB*500 Pub/Sub | NATS | 50 | 2.248722593 s/op | 2,60 GB | 96.50 | 25G |
1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 s/op | 614,9 MB | 80.19 | 19G |
64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 s/op | 3,29 GB | 97.59 | 31G |
64KB*10000 Pub/Sub | RocksMQ | 50 | 3.253778195 s/op | 331,2 MB | 134.6 | 24G |
1KB*50000 Pub/Sub | NATS | 50 | 2.629391004 s/op | 635,1 MB | 179.67 | 2.6G |
1KB*50000 Pub/Sub | RocksMQ | 50 | 0.897638581 s/op | 232,3 MB | 60.42 | 521M |
Tabelle 1: Ergebnisse der Pub/Sub-Leistungstests
Milvus-Integrationstest
Datengröße: 100M
Ergebnis: In umfangreichen Tests mit einem Datensatz von 100 Millionen Vektoren zeigte NATS eine geringere Vektorsuche und Abfragelatenz.
Metriken | RocksMQ (ms) | NATS (ms) |
---|---|---|
Durchschnittliche Vektorsuch-Latenzzeit | 23.55 | 20.17 |
Vektorsuchanfragen pro Sekunde (RPS) | 2.95 | 3.07 |
Durchschnittliche Abfrage-Latenzzeit | 7.2 | 6.74 |
Abfrageanfragen pro Sekunde (RPS) | 1.47 | 1.54 |
Tabelle 2: Ergebnisse der Milvus-Integrationstests mit einem 100-Meter-Datensatz
Datensatz: <100M
Ergebnis: Für Datensätze kleiner als 100M zeigen NATS und RocksMQ eine ähnliche Leistung.
Schlussfolgerung: Verstärkung von Milvus mit NATS Messaging
Die Integration von NATS in Milvus stellt einen bedeutenden Schritt in der Datenverarbeitung dar. Egal, ob Sie sich mit Echtzeitanalysen, Anwendungen für maschinelles Lernen oder anderen datenintensiven Projekten befassen, NATS unterstützt Ihre Projekte mit Effizienz, Zuverlässigkeit und Geschwindigkeit. Da sich die Datenlandschaft weiterentwickelt, gewährleistet ein robustes Messaging-System wie NATS innerhalb von Milvus eine nahtlose, zuverlässige und hochleistungsfähige Datenkommunikation.
- Die Rolle von Message Queues in Milvus verstehen
- Was ist NATS?
- Aktivieren von NATS
- NATS für Milvus konfigurieren
- Umstellung von RocksMQ auf NATS
- NATS vs. RocksMQ: Ein Leistungsvergleich
- Schlussfolgerung: Verstärkung von Milvus mit NATS Messaging
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word