🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI

HomeBlogsOptimización de la comunicación de datos: Milvus adopta NATS Messaging

Optimización de la comunicación de datos: Milvus adopta NATS Messaging

  • Engineering
November 24, 2023
Zhen Ye

En el intrincado tapiz del tratamiento de datos, la comunicación sin fisuras es el hilo que une las operaciones. Milvus, la pionera base de datos vectorial de código abierto, se ha embarcado en un viaje transformador con su última función: la integración de la mensajería NATS. En esta completa entrada de blog, desentrañaremos los entresijos 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 en la nube de Milvus, la cola de mensajes, o Log Broker, tiene una importancia fundamental. Es la columna vertebral que garantiza los flujos de datos persistentes, la sincronización, las notificaciones de eventos y la integridad de los datos durante las recuperaciones del sistema. Tradicionalmente, RocksMQ era la opción más sencilla en el modo Milvus Standalone, especialmente cuando se comparaba con Pulsar y Kafka, pero sus limitaciones se hicieron evidentes con datos extensos y escenarios complejos.

Milvus 2.3 introduce NATS, una implementación MQ de nodo único, que redefine la forma de gestionar flujos de datos. A diferencia de sus predecesores, NATS libera a los usuarios de Milvus de las limitaciones de rendimiento, ofreciendo una experiencia sin fisuras en el manejo de volúmenes de datos sustanciales.

¿Qué es NATS?

NATS es una tecnología de conectividad de sistemas distribuidos implementada en Go. Soporta varios modos de comunicación como Request-Reply y Publish-Subscribe entre sistemas, proporciona persistencia de datos a través de JetStream, y ofrece capacidades distribuidas a través de RAFT incorporado. Puede consultar el sitio web oficial de NATS para una comprensión más detallada de NATS.

En el modo Milvus 2.3 Standalone, NATS, JetStream y PubSub proporcionan a Milvus sólidas capacidades MQ.

Activación de 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 utilizar. Para habilitar NATS, configure mq.type=natsmq. Si ve registros similares a los siguientes después de iniciar instancias Milvus, ha habilitado correctamente NATS como cola de mensajes.

[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]

Configuración de NATS para Milvus

Las opciones de personalización de NATS incluyen especificar el puerto de escucha, el directorio de almacenamiento JetStream, el tamaño máximo de la carga útil y el tiempo de espera de inicialización. El ajuste fino de 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. Configure server.port=-1 para seleccionar un puerto al azar.

  • 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 mejorar el rendimiento de lectura/escritura de Milvus.

  • maxFileStore establece el límite superior del tamaño de almacenamiento JetStream. Si se supera este límite, no se podrán seguir escribiendo datos.

  • maxPayload limita el tamaño de los mensajes individuales. Debe mantenerlo por encima de 5 MB 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 NATS.

Para más información, consulte la documentación oficial de NATS.

Migración de RocksMQ a NATS

La migración de RocksMQ a NATS es un proceso continuo que implica pasos como detener las operaciones de escritura, vaciar los datos, modificar las configuraciones y verificar la migración a través de 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 finalice. Este paso garantiza que todos los datos pendientes se vacíen y que el sistema esté listo para el cierre.

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

  4. Inicie Milvus 2.3.

  5. Haga una copia de seguridad y limpie los datos originales almacenados en el directorio rocksmq.path. (Opcional)

NATS vs. RocksMQ: Un enfrentamiento de rendimiento

Pruebas de rendimiento Pub/Sub

  • Plataforma de pruebas: Chip M1 Pro / Memoria: 16GB

  • Escenario de la prueba: Suscripción y publicación de paquetes de datos aleatorios a 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 pruebaMQnúmero de operacionesCoste por operaciónCoste de memoriaTiempo total 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 y consulta de vectores.

MétricasRocksMQ (ms)NATS (ms)
Latencia media de búsqueda de vectores23.5520.17
Peticiones de búsqueda vectorial por segundo (RPS)2.953.07
Latencia media de la consulta7.26.74
Peticiones 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 100 millones

Conjunto de datos: <100M

Resultado: Para conjuntos de datos inferiores a 100M, NATS y RocksMQ muestran un rendimiento similar.

Conclusión: Potenciación de Milvus con la mensajería NATS

La integración de NATS en Milvus supone un avance significativo en el procesamiento de datos. Tanto si se adentra en el análisis en tiempo real como en aplicaciones de aprendizaje automático o en cualquier empresa que haga un uso intensivo de los datos, NATS dota a sus proyectos de eficacia, fiabilidad y velocidad. A medida que evoluciona el panorama de los datos, 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.

Like the article? Spread the word

Sigue Leyendo