Optimización de la comunicación de datos: Milvus adopta NATS Messaging
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. Configureserver.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.initializeTimeout
controla 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.
Antes de iniciar la migración, detenga todas las operaciones de escritura en Milvus.
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.Modifique el archivo de configuración de Milvus configurando
mq.type=natsmq
y ajustando las opciones pertinentes en la secciónnatsmq
.Inicie Milvus 2.3.
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 prueba | MQ | número de operaciones | Coste por operación | Coste de memoria | Tiempo total 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 y consulta de vectores.
Métricas | RocksMQ (ms) | NATS (ms) |
---|---|---|
Latencia media de búsqueda de vectores | 23.55 | 20.17 |
Peticiones de búsqueda vectorial por segundo (RPS) | 2.95 | 3.07 |
Latencia media de la consulta | 7.2 | 6.74 |
Peticiones 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 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.
- Comprender el papel de las colas de mensajes en Milvus
- ¿Qué es NATS?
- Activación de NATS
- Configuración de NATS para Milvus
- Migración de RocksMQ a NATS
- NATS vs. RocksMQ: Un enfrentamiento de rendimiento
- Conclusión: Potenciación de Milvus con la mensajería 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