Как Milvus распределяет нагрузку запросов между узлами?
Изображение обложки Binlog
В предыдущих статьях блога мы последовательно представили функции Deletion, Bitset и Compaction в Milvus 2.0. В завершение этой серии статей мы хотели бы поделиться разработкой баланса нагрузки, жизненно важной функции в распределенном кластере Milvus.
Реализация
В то время как количество и размер сегментов, буферизуемых на узлах запросов, различаются, производительность поиска на узлах запросов также может отличаться. Худший случай может произойти, когда несколько узлов запросов истощаются, выполняя поиск по большому объему данных, а вновь созданные узлы запросов простаивают, потому что им не распределяется сегмент, что приводит к огромной трате ресурсов процессора и сильному падению производительности поиска.
Чтобы избежать подобных ситуаций, координатор запросов (query coord) запрограммирован на равномерное распределение сегментов между узлами запросов в соответствии с объемом оперативной памяти узлов. Таким образом, ресурсы ЦП расходуются одинаково на всех узлах, что значительно повышает производительность поиска.
Запуск автоматической балансировки нагрузки
В соответствии со значением по умолчанию в конфигурации queryCoord.balanceIntervalSeconds
, коорд запроса проверяет использование оперативной памяти (в процентах) всех узлов запроса каждые 60 секунд. Если выполняется одно из следующих условий, коорд запроса начинает балансировать нагрузку на узел запроса:
- Использование оперативной памяти любым узлом запроса в кластере больше, чем
queryCoord.overloadedMemoryThresholdPercentage
(по умолчанию: 90); - или абсолютное значение разницы в использовании оперативной памяти любыми двумя узлами запроса больше, чем
queryCoord.memoryUsageMaxDifferencePercentage
(по умолчанию: 30).
После передачи сегментов от узла запроса-источника к узлу запроса назначения они также должны удовлетворять обоим следующим условиям:
- Использование оперативной памяти узла запроса назначения не превышает
queryCoord.overloadedMemoryThresholdPercentage
(по умолчанию: 90); - абсолютное значение разницы в использовании оперативной памяти узлов запроса источника и назначения после балансировки нагрузки меньше, чем до балансировки нагрузки.
При выполнении вышеуказанных условий коорд запроса приступает к балансировке нагрузки запроса между узлами.
Баланс нагрузки
Когда срабатывает баланс нагрузки, коорд запроса сначала загружает целевой сегмент(ы) на узел запроса назначения. Оба узла запроса возвращают результаты поиска из целевого сегмента(ов) при любом поисковом запросе в этот момент, чтобы гарантировать полноту результата.
После того как узел запроса назначения успешно загрузит целевой сегмент, коорд запроса публикует sealedSegmentChangeInfo
в канале запросов. Как показано ниже, onlineNodeID
и onlineSegmentIDs
указывают на узел запроса, который загружает сегмент, и на загруженный сегмент соответственно, а offlineNodeID
и offlineSegmentIDs
указывают на узел запроса, которому нужно освободить сегмент, и на сегмент, который нужно освободить, соответственно.
sealedSegmentChangeInfo
Получив сообщение sealedSegmentChangeInfo
, исходный узел запроса затем освобождает целевой сегмент.
Рабочий процесс балансировки нагрузки
Весь процесс завершается успешно, когда узел запроса источника освобождает целевой сегмент. После этого нагрузка на узлы запроса будет сбалансирована, то есть использование оперативной памяти всеми узлами запроса будет не больше, чем queryCoord.overloadedMemoryThresholdPercentage
, а абсолютное значение разницы в использовании оперативной памяти узлов запроса источника и назначения после балансировки нагрузки будет меньше, чем до балансировки нагрузки.
Что дальше?
В серии блогов о новых функциях версии 2.0 мы постараемся рассказать о дизайне новых функций. Читайте больше в этой серии блогов!
- Как Milvus удаляет потоковые данные в распределенном кластере
- Как уплотнить данные в Milvus?
- Как Milvus балансирует нагрузку запросов между узлами?
- Как Bitset обеспечивает универсальность поиска по векторному подобию
Это заключительная часть серии блогов о новых возможностях Milvus 2.0. После этой серии мы планируем новую серию Milvus Deep Dive, которая познакомит вас с базовой архитектурой Milvus 2.0. Пожалуйста, следите за новостями.
- Реализация
- Баланс нагрузки
- Что дальше?
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