Optimisation de la communication des données : Milvus adopte la messagerie NATS
Dans la tapisserie complexe du traitement des données, la communication sans faille est le fil conducteur des opérations. Milvus, la base de données vectorielles open-source pionnière, s'est lancée dans un voyage transformateur avec sa dernière fonctionnalité : L'intégration de la messagerie NATS. Dans cet article de blog détaillé, nous allons dévoiler les subtilités de cette intégration, en explorant ses principales fonctionnalités, son processus d'installation, ses avantages en termes de migration et sa comparaison avec son prédécesseur, RocksMQ.
Comprendre le rôle des files d'attente de messages dans Milvus
Dans l'architecture cloud-native de Milvus, la file d'attente de messages, ou Log Broker, revêt une importance cruciale. C'est l'épine dorsale qui assure les flux de données persistants, la synchronisation, les notifications d'événements et l'intégrité des données lors des reprises de système. Traditionnellement, RocksMQ était le choix le plus simple en mode autonome Milvus, notamment par rapport à 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, qui redéfinit 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 transparente dans le traitement de volumes de données importants.
Qu'est-ce que NATS ?
NATS est une technologie de connectivité de système distribué mise en œuvre en Go. Elle prend en charge divers modes de communication tels que Request-Reply et Publish-Subscribe entre les systèmes, assure la persistance des données grâce à JetStream et offre des capacités distribuées grâce à RAFT intégré. Vous pouvez vous référer au site officiel de NATS pour une compréhension plus détaillée de NATS.
En mode autonome Milvus 2.3, NATS, JetStream et PubSub fournissent à Milvus de solides capacités MQ.
Activation du 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 le NATS, définissez mq.type=natsmq
. Si vous voyez des journaux similaires à ceux ci-dessous après avoir lancé des instances Milvus, vous avez réussi à activer NATS en tant que file d'attente de messages.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
Configuration du NATS pour Milvus
Les options de personnalisation du NATS comprennent la spécification du port d'écoute, du répertoire de stockage JetStream, de la taille maximale de la charge utile et du délai d'initialisation. Le réglage précis 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.port
pour l'écoute du serveur NATS. En cas de conflit de port, Milvus ne peut pas démarrer. Définissezserver.port=-1
pour sélectionner un port de manière aléatoire.storeDir
spécifie le répertoire pour le stockage JetStream. Nous recommandons de stocker le répertoire dans un lecteur à état solide (SSD) très performant pour améliorer le débit de lecture/écriture de Milvus.maxFileStore
fixe la limite supérieure de la taille du stockage JetStream. Le dépassement de cette limite empêchera la poursuite de l'écriture des données.maxPayload
limite la taille des messages individuels. Il est conseillé de la maintenir au-dessus de 5 Mo pour éviter tout rejet d'écriture.initializeTimeout
contrôle le délai de démarrage du serveur NATSmonitor
configure les journaux indépendants du NATSretention
contrôle le mécanisme de conservation des messages NATS.
Pour plus d'informations, consultez la documentation officielle du NATS.
Migration de RocksMQ vers le NATS
La migration de RocksMQ vers NATS est un processus transparent qui implique des étapes telles que l'arrêt des opérations d'écriture, la vidange des données, la modification des configurations et la vérification de la migration à l'aide des journaux Milvus.
Avant de lancer la migration, arrêtez toutes les opérations d'écriture dans Milvus.
Exécuter l'opération
FlushALL
dans Milvus et attendre son achèvement. Cette étape permet de s'assurer que toutes les données en attente sont vidées et que le système est prêt pour l'arrêt.Modifier le fichier de configuration de Milvus en définissant
mq.type=natsmq
et en ajustant les options pertinentes dans la sectionnatsmq
.Démarrer le système Milvus 2.3.
Sauvegarder et nettoyer les données originales stockées dans le répertoire
rocksmq.path
. (Facultatif)
NATS vs. RocksMQ : une démonstration de performance
Test de performance Pub/Sub
Plate-forme de test : Puce M1 Pro / Mémoire : 16 Go
Scénario de test : Abonnement et publication de paquets de données aléatoires à un sujet de manière répétée jusqu'à ce que le dernier résultat publié soit reçu.
Résultats :
Pour les petits paquets de données (< 64kb), RocksMQ surpasse NATS en termes de mémoire, de CPU et de vitesse de réponse.
Pour les paquets de données plus importants (> 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 de la mémoire | Temps total de l'unité centrale | Coût du stockage |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4,29 GO | 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 de Pub/Sub
Test d'intégration Milvus
Taille des données : 100M
Résultat : Lors de tests approfondis avec un ensemble de données de 100 millions de vecteurs, NATS a démontré une latence réduite pour la recherche de vecteurs et les requêtes.
Métriques | RocksMQ (ms) | NATS (ms) |
---|---|---|
Temps de latence moyen pour la recherche de vecteurs | 23.55 | 20.17 |
Demandes de recherche vectorielle par seconde (RPS) | 2.95 | 3.07 |
Temps de latence moyen 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 l'ensemble de données 100m
Ensemble de données : <100M
Résultat : Pour les ensembles 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 dans 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 tout autre projet à forte intensité de données, les NATS confèrent à vos projets efficacité, fiabilité et rapidité. À mesure que le paysage des données évolue, le fait de disposer d'un système de messagerie robuste tel que NATS au sein de Milvus garantit une communication de données transparente, fiable et performante.
- Comprendre le rôle des files d'attente de messages dans Milvus
- Qu'est-ce que NATS ?
- Activation du NATS
- Configuration du NATS pour Milvus
- Migration de RocksMQ vers le NATS
- NATS vs. RocksMQ : une démonstration de performance
- Conclusion : Renforcer Milvus avec la messagerie NATS
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