Optimisation de la communication des données : Milvus adopte la messagerie NATS
Dans la tapisserie complexe du traitement des données, une communication fluide est le fil qui relie les opérations entre elles. Milvus, la base de données vectorielle open source pionnière, s’est engagée dans un parcours transformateur avec sa dernière fonctionnalité : l’intégration de la messagerie NATS. Dans cet article de blog complet, nous dévoilerons les subtilités de cette intégration, en explorant ses fonctionnalités principales, son processus de configuration, ses avantages en matière de migration et la manière dont elle se compare à son prédécesseur, RocksMQ.
Comprendre le rôle des files de messages dans Milvus
Dans l’architecture cloud-native de Milvus, la file de messages, ou Log Broker, revêt une importance capitale. C’est l’épine dorsale qui garantit des flux de données persistants, la synchronisation, les notifications d’événements et l’intégrité des données lors des récupérations système. Traditionnellement, RocksMQ était le choix le plus simple en mode Milvus Standalone, surtout en comparaison avec Pulsar et Kafka, mais ses limites sont devenues évidentes avec des données volumineuses et des scénarios complexes.
Milvus 2.3 introduit NATS, une implémentation MQ à nœud unique, redéfinissant la manière de gérer les flux de données. Contrairement à ses prédécesseurs, NATS libère les utilisateurs de Milvus des contraintes de performance, offrant une expérience fluide dans la gestion de volumes de données importants.
Qu’est-ce que NATS ?
NATS est une technologie de connectivité de systèmes distribués implémentée en Go. Elle prend en charge divers modes de communication tels que Request-Reply et Publish-Subscribe entre systèmes, fournit la persistance des données via JetStream et offre des capacités distribuées grâce à RAFT intégré. Vous pouvez consulter le site officiel de NATS pour une compréhension plus détaillée de NATS.
En mode Milvus 2.3 Standalone, NATS, JetStream et PubSub fournissent à Milvus de solides capacités MQ.
Activer NATS
Milvus 2.3 propose une nouvelle option de contrôle, mq.type, qui permet aux utilisateurs de spécifier le type de MQ qu’ils souhaitent utiliser. Pour activer NATS, définissez mq.type=natsmq. Si vous voyez des journaux similaires à ceux ci-dessous après avoir lancé des instances Milvus, vous avez activé avec succès NATS comme file de messages.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
Configurer NATS pour Milvus
Les options de personnalisation de NATS incluent la spécification du port d’écoute, du répertoire de stockage JetStream, de la taille maximale de charge utile et du délai d’initialisation. Le réglage fin de ces paramètres garantit des performances et une fiabilité optimales.
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.
Remarque :
Vous devez spécifier
server.portpour l’écoute du serveur NATS. En cas de conflit de port, Milvus ne peut pas démarrer. Définissezserver.port=-1pour sélectionner un port de manière aléatoire.storeDirspécifie le répertoire de stockage de JetStream. Nous recommandons de stocker le répertoire sur un disque SSD (solid-state drive) hautes performances pour un meilleur débit de lecture/écriture de Milvus.maxFileStoredéfinit la limite supérieure de la taille de stockage de JetStream. Le dépassement de cette limite empêchera toute écriture de données supplémentaire.maxPayloadlimite la taille des messages individuels. Vous devez la maintenir au-dessus de 5MB pour éviter tout rejet d’écriture.initializeTimeoutcontrôle le délai d’expiration du démarrage du serveur NATS.monitorconfigure les journaux indépendants de NATS.retentioncontrôle le mécanisme de conservation des messages NATS.
Pour plus d’informations, consultez la documentation officielle de NATS.
Migration de RocksMQ vers NATS
La migration de RocksMQ vers NATS est un processus fluide impliquant des étapes telles que l’arrêt des opérations d’écriture, le vidage des données, la modification des configurations et la vérification de la migration via les journaux Milvus.
Avant de lancer la migration, arrêtez toutes les opérations d’écriture dans Milvus.
Exécutez l’opération
FlushALLdans Milvus et attendez sa fin. Cette étape garantit que toutes les données en attente sont vidées et que le système est prêt pour l’arrêt.Modifiez le fichier de configuration de Milvus en définissant
mq.type=natsmqet en ajustant les options pertinentes dans la sectionnatsmq.Démarrez Milvus 2.3.
Sauvegardez et nettoyez les données d’origine stockées dans le répertoire
rocksmq.path. (Facultatif)
NATS vs. RocksMQ : un duel de performances
Tests de performance Pub/Sub
Plateforme de test : puce M1 Pro / mémoire : 16GB
Scénario de test : s’abonner à un sujet et y publier à plusieurs reprises des paquets de données aléatoires jusqu’à la réception du dernier résultat publié.
Résultats :
Pour les paquets de données plus petits (< 64kb), RocksMQ surpasse NATS en matière de mémoire, de CPU et de vitesse de réponse.
Pour les paquets de données plus volumineux (> 64kb), NATS surpasse RocksMQ, offrant des temps de réponse beaucoup plus rapides.
| Type de test | MQ | nombre d’opérations | coût par opération | Coût mémoire | Temps CPU total | Coût de stockage |
|---|---|---|---|---|---|---|
| 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 |
Tableau 1 : résultats des tests de performance Pub/Sub
Tests d’intégration de Milvus
Taille des données : 100M
Résultat : Lors de tests approfondis avec un jeu de données de 100 millions de vecteurs, NATS a démontré une latence plus faible pour la recherche vectorielle et les requêtes.
| Métriques | RocksMQ (ms) | NATS (ms) |
|---|---|---|
| Latence moyenne de recherche vectorielle | 23.55 | 20.17 |
| Requêtes de recherche vectorielle par seconde (RPS) | 2.95 | 3.07 |
| Latence moyenne des requêtes | 7.2 | 6.74 |
| Requêtes par seconde (RPS) | 1.47 | 1.54 |
Tableau 2 : résultats des tests d’intégration de Milvus avec un jeu de données de 100m
Jeu de données : <100M
Résultat : Pour les jeux de données inférieurs à 100M, NATS et RocksMQ affichent des performances similaires.
Conclusion : renforcer Milvus avec la messagerie NATS
L’intégration de NATS au sein de Milvus marque une avancée significative dans le traitement des données. Qu’il s’agisse d’analyses en temps réel, d’applications d’apprentissage automatique ou de toute initiative à forte intensité de données, NATS apporte à vos projets efficacité, fiabilité et rapidité. À mesure que le paysage des données évolue, disposer d’un système de messagerie robuste comme NATS au sein de Milvus garantit une communication de données fluide, fiable et hautement performante.
Continuer à lire

How to Install and Run OpenClaw (Previously Clawdbot/Moltbot) on Mac
Turn your Mac into an AI gateway for WhatsApp, Telegram, Discord, iMessage, and more — in under 5 minutes.

Why AI Databases Don't Need SQL
Whether you like it or not, here's the truth: SQL is destined for decline in the era of AI.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.



