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

milvus-logo
LFAI
  • Home
  • Blog
  • ¿Cómo equilibra Milvus la carga de consultas entre nodos?

¿Cómo equilibra Milvus la carga de consultas entre nodos?

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image Imagen de portada de Binlog

Por Xi Ge.

En artículos anteriores del blog, hemos introducido sucesivamente las funciones Deletion, Bitset y Compaction en Milvus 2.0. Para culminar esta serie, nos gustaría compartir el diseño detrás de Load Balance, una función vital en el cluster distribuido de Milvus.

Implementación

Mientras que el número y el tamaño de los segmentos almacenados en los nodos de consulta difieren, el rendimiento de la búsqueda en los nodos de consulta también puede variar. El peor caso podría darse cuando unos pocos nodos de consulta se agotan buscando en una gran cantidad de datos, pero los nodos de consulta recién creados permanecen inactivos porque no se les distribuye ningún segmento, lo que provoca un desperdicio masivo de recursos de CPU y una enorme caída en el rendimiento de la búsqueda.

Para evitar estas circunstancias, el coordinador de consultas (query coord) está programado para distribuir segmentos uniformemente a cada nodo de consulta en función del uso de RAM de los nodos. De este modo, los recursos de la CPU se consumen por igual en todos los nodos, lo que mejora significativamente el rendimiento de la búsqueda.

Activar el equilibrio de carga automático

De acuerdo con el valor por defecto de la configuración queryCoord.balanceIntervalSeconds, la coordenada de consulta comprueba el uso de RAM (en porcentaje) de todos los nodos de consulta cada 60 segundos. Si se cumple alguna de las siguientes condiciones, el coordinador de consultas comienza a equilibrar la carga de las consultas entre los nodos de consulta:

  1. El uso de RAM de cualquier nodo de consulta del clúster es superior a queryCoord.overloadedMemoryThresholdPercentage (por defecto: 90);
  2. O el valor absoluto de la diferencia de uso de RAM de dos nodos de consulta cualesquiera es superior a queryCoord.memoryUsageMaxDifferencePercentage (por defecto: 30).

Una vez transferidos los segmentos del nodo de consulta de origen al nodo de consulta de destino, también deben cumplir las dos condiciones siguientes:

  1. El uso de RAM del nodo de consulta de destino no es mayor que queryCoord.overloadedMemoryThresholdPercentage (por defecto: 90);
  2. El valor absoluto de la diferencia de uso de RAM de los nodos de consulta de origen y destino después del equilibrado de carga es menor que antes del equilibrado de carga.

Si se cumplen estas condiciones, la coordinación de consultas procede a equilibrar la carga de consultas entre los nodos.

Equilibrio de carga

Cuando se activa el equilibrio de carga, el coordinador de consultas carga primero el segmento o segmentos de destino en el nodo de consulta de destino. En este punto, ambos nodos de consulta devuelven los resultados de búsqueda del segmento o segmentos de destino en cualquier solicitud de búsqueda para garantizar la integridad del resultado.

Después de que el nodo de consulta de destino cargue con éxito el segmento de destino, la coordenada de consulta publica un sealedSegmentChangeInfo en el Canal de Consulta. Como se muestra a continuación, onlineNodeID y onlineSegmentIDs indican el nodo de consulta que carga el segmento y el segmento cargado respectivamente, y offlineNodeID y offlineSegmentIDs indican el nodo de consulta que necesita liberar el segmento y el segmento a liberar respectivamente.

sealedSegmentChangeInfo sealedSegmentChangeInfo

Una vez recibido sealedSegmentChangeInfo, el nodo de consulta de origen libera el segmento de destino.

Load Balance Workflow Flujo de trabajo de equilibrio de carga

El proceso completo tiene éxito cuando el nodo de consulta de origen libera el segmento de destino. Al completar esto, la carga de la consulta se equilibra entre los nodos de consulta, lo que significa que el uso de RAM de todos los nodos de consulta no es mayor que queryCoord.overloadedMemoryThresholdPercentage, y el valor absoluto de la diferencia de uso de RAM de los nodos de consulta de origen y destino después del equilibrado de carga es menor que antes del equilibrado de carga.

¿Y ahora qué?

En el blog de la serie de nuevas funciones 2.0, pretendemos explicar el diseño de las nuevas funciones. ¡Lea más en esta serie de blogs!

Este es el final de la serie de blogs sobre las nuevas características de Milvus 2.0. Después de esta serie, estamos planeando una nueva serie de Milvus Deep Dive, que introduce la arquitectura básica de Milvus 2.0. Permanezca atento.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Sigue Leyendo