Optimización de la comunicación de datos: Milvus adopta la mensajería NATS
En el intrincado tapiz del procesamiento de datos, la comunicación fluida es el hilo que une las operaciones. Milvus, la innovadora base de datos vectorial de código abierto, ha emprendido un viaje transformador con su función más reciente: la integración de mensajería NATS. En esta completa publicación de blog, desentrañaremos las complejidades de esta integración, explorando sus características principales, el proceso de configuración, los beneficios de la migración y cómo se compara con su predecesor, RocksMQ.
Comprender el papel de las colas de mensajes en Milvus
En la arquitectura nativa de la nube de Milvus, la cola de mensajes, o Log Broker, tiene una importancia fundamental. Es la columna vertebral que garantiza flujos de datos persistentes, sincronización, notificaciones de eventos e integridad de los datos durante las recuperaciones del sistema. Tradicionalmente, RocksMQ era la opción más sencilla en el modo Standalone de Milvus, especialmente en comparación con Pulsar y Kafka, pero sus limitaciones se hicieron evidentes con datos extensos y escenarios complejos.
Milvus 2.3 introduce NATS, una implementación de MQ de un solo nodo, redefiniendo cómo gestionar los flujos de datos. A diferencia de sus predecesores, NATS libera a los usuarios de Milvus de las restricciones de rendimiento, ofreciendo una experiencia fluida en el manejo de volúmenes sustanciales de datos.
¿Qué es NATS?
NATS es una tecnología de conectividad de sistemas distribuidos implementada en Go. Admite varios modos de comunicación como Request-Reply y Publish-Subscribe entre sistemas, proporciona persistencia de datos mediante JetStream y ofrece capacidades distribuidas mediante RAFT integrado. Puedes consultar el sitio web oficial de NATS para obtener una comprensión más detallada de NATS.
En el modo Standalone de Milvus 2.3, NATS, JetStream y PubSub proporcionan a Milvus capacidades robustas de MQ.
Habilitar NATS
Milvus 2.3 ofrece una nueva opción de control, mq.type, que permite a los usuarios especificar el tipo de MQ que desean usar. Para habilitar NATS, configura mq.type=natsmq. Si ves registros similares a los siguientes después de iniciar instancias de Milvus, habrás habilitado correctamente NATS como cola de mensajes.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
Configurar NATS para Milvus
Las opciones de personalización de NATS incluyen especificar el puerto de escucha, el directorio de almacenamiento de JetStream, el tamaño máximo de la carga útil y el tiempo de espera de inicialización. Ajustar estos parámetros garantiza un rendimiento y una fiabilidad óptimos.
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:
Debe especificar
server.portpara la escucha del servidor NATS. Si hay un conflicto de puertos, Milvus no puede iniciarse. Establezcaserver.port=-1para seleccionar un puerto aleatoriamente.storeDirespecifica el directorio para el almacenamiento de JetStream. Recomendamos almacenar el directorio en una unidad de estado sólido (SSD) de alto rendimiento para un mejor rendimiento de lectura/escritura de Milvus.maxFileStoreestablece el límite superior del tamaño de almacenamiento de JetStream. Superar este límite impedirá la escritura adicional de datos.maxPayloadlimita el tamaño de los mensajes individuales. Debe mantenerlo por encima de 5MB para evitar rechazos de escritura.initializeTimeoutcontrola el tiempo de espera de inicio del servidor NATS.monitorconfigura los registros independientes de NATS.retentioncontrola el mecanismo de retención de los mensajes de NATS.
Para obtener más información, consulte la documentación oficial de NATS.
Migración de RocksMQ a NATS
Migrar de RocksMQ a NATS es un proceso fluido que implica pasos como detener las operaciones de escritura, vaciar los datos, modificar las configuraciones y verificar la migración mediante los registros de Milvus.
Antes de iniciar la migración, detenga todas las operaciones de escritura en Milvus.
Ejecute la operación
FlushALLen Milvus y espere a que se complete. Este paso garantiza que todos los datos pendientes se vacíen y que el sistema esté listo para apagarse.Modifique el archivo de configuración de Milvus estableciendo
mq.type=natsmqy ajustando las opciones relevantes en la secciónnatsmq.Inicie Milvus 2.3.
Realice una copia de seguridad y limpie los datos originales almacenados en el directorio
rocksmq.path. (Opcional)
NATS frente a RocksMQ: Una comparación de rendimiento
Pruebas de rendimiento Pub/Sub
Plataforma de prueba: Chip M1 Pro / Memoria: 16GB
Escenario de prueba: Suscribirse y publicar paquetes de datos aleatorios en un tema repetidamente hasta que se reciba el último resultado publicado.
Resultados:
Para paquetes de datos más pequeños (< 64kb), RocksMQ supera a NATS en cuanto a memoria, CPU y velocidad de respuesta.
Para paquetes de datos más grandes (> 64kb), NATS supera a RocksMQ, ofreciendo tiempos de respuesta mucho más rápidos.
| Tipo de prueba | MQ | recuento de op | coste por op | Coste de memoria | Tiempo total de CPU | Coste de almacenamiento |
|---|---|---|---|---|---|---|
| 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 |
Tabla 1: Resultados de las pruebas de rendimiento Pub/Sub
Pruebas de integración de Milvus
Tamaño de los datos: 100M
Resultado: En pruebas exhaustivas con un conjunto de datos de 100 millones de vectores, NATS mostró una menor latencia de búsqueda vectorial y de consulta.
| Métricas | RocksMQ (ms) | NATS (ms) |
|---|---|---|
| Latencia media de búsqueda vectorial | 23.55 | 20.17 |
| Solicitudes de búsqueda vectorial por segundo (RPS) | 2.95 | 3.07 |
| Latencia media de consulta | 7.2 | 6.74 |
| Solicitudes de consulta por segundo (RPS) | 1.47 | 1.54 |
Tabla 2: Resultados de las pruebas de integración de Milvus con un conjunto de datos de 100m
Conjunto de datos: <100M
Resultado: Para conjuntos de datos menores de 100M, NATS y RocksMQ muestran un rendimiento similar.
Conclusión: Potenciar Milvus con mensajería NATS
La integración de NATS dentro de Milvus marca un avance significativo en el procesamiento de datos. Ya sea al profundizar en análisis en tiempo real, aplicaciones de aprendizaje automático o cualquier iniciativa intensiva en datos, NATS potencia tus proyectos con eficiencia, fiabilidad y velocidad. A medida que el panorama de los datos evoluciona, contar con un sistema de mensajería robusto como NATS dentro de Milvus garantiza una comunicación de datos fluida, fiable y de alto rendimiento.
Sigue leyendo

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

DeepSeek-OCR Explained: Optical Compression for Scalable Long-Context and RAG Systems
Discover how DeepSeek-OCR uses visual tokens and Contexts Optical Compression to boost long-context LLM efficiency and reshape RAG performance.

Bringing AI to Legal Tech: The Role of Vector Databases in Enhancing LLM Guardrails
Discover how vector databases enhance AI reliability in legal tech, ensuring accurate, compliant, and trustworthy AI-powered legal solutions.



