¿Cómo equilibra Milvus la carga de consultas entre nodos?
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:
- El uso de RAM de cualquier nodo de consulta del clúster es superior a
queryCoord.overloadedMemoryThresholdPercentage
(por defecto: 90); - 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:
- El uso de RAM del nodo de consulta de destino no es mayor que
queryCoord.overloadedMemoryThresholdPercentage
(por defecto: 90); - 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
Una vez recibido sealedSegmentChangeInfo
, el nodo de consulta de origen libera el segmento de destino.
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!
- Cómo Milvus elimina los datos de streaming en un clúster distribuido
- ¿Cómo compactar datos en Milvus?
- ¿Cómo equilibra Milvus la carga de consultas entre nodos?
- Cómo Bitset permite la versatilidad de la búsqueda de similitud vectorial
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.
- Implementación
- Equilibrio de carga
- ¿Y ahora qué?
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