Optimización de la comunicación de datos: Milvus adopta la mensajería NATS

Oct 11, 20235 min read

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.port para la escucha del servidor NATS. Si hay un conflicto de puertos, Milvus no puede iniciarse. Establezca server.port=-1 para seleccionar un puerto aleatoriamente.

  • storeDir especifica 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.

  • maxFileStore establece el límite superior del tamaño de almacenamiento de JetStream. Superar este límite impedirá la escritura adicional de datos.

  • maxPayload limita 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.

  • monitor configura los registros independientes de NATS.

  • retention controla 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.

  1. Antes de iniciar la migración, detenga todas las operaciones de escritura en Milvus.

  2. Ejecute la operación FlushALL en 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.

  3. Modifique el archivo de configuración de Milvus estableciendo mq.type=natsmq y ajustando las opciones relevantes en la sección natsmq.

  4. Inicie Milvus 2.3.

  5. 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 pruebaMQrecuento de opcoste por opCoste de memoriaTiempo total de CPUCoste de almacenamiento
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

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étricasRocksMQ (ms)NATS (ms)
Latencia media de búsqueda vectorial23.5520.17
Solicitudes de búsqueda vectorial por segundo (RPS)2.953.07
Latencia media de consulta7.26.74
Solicitudes de consulta por segundo (RPS)1.471.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.

Actualizado el Jul 09, 2026