Оптимизация ресурсов при неравномерной нагрузке - предотвращение перегрузки или недогрузки сервисов за счет автоматического распределения количества реплик для повышения устойчивость сервисов#

Контекст#

В реальных системах нагрузка на сервисы редко бывает равномерной, она колеблется из-за пиковой активности или временных различий между регионами. Сервисы с фиксированным количеством реплик неэффективны в условиях неравномерной нагрузки.

На кластере разные микросервисы нагружены в разное время.

Проблема#

Отсутствие механизма выставления динамически минимального и максимального числа реплик на разных микросервисах.

Решение#

Для решения данной проблемы в Synapse Autoscaler (далее AUSC) используется ProjectCapacityPolicy - механизм динамического управления минимальным и максимальным количеством реплик в зависимости от уровня нагрузки и источников данных.

Использование динамического подхода в отличие от статического позволяет оптимизировать ресурсы:

../../_images/capacity_management.svg

Рис.1 - Оптимизация ресурсов

Для применения паттерна оптимизация ресурсов при неравномерной нагрузке необходимо:

  1. Создать ProjectCapacityPolicy для контроля выделения ресурсов.

  2. Настроить ProjectCapacityPolicy под потребности:

    • Указать уровни использования в секции usageLevels с условиями и границами.

    • Определить для каждого уровня свое минимальное и максимальное количество реплик.

    • Указать источники данных в секции sources.

  3. Создать ScaledObject для целевого deployment.

  4. Указать в ScaledObject имя уровня в advanced.usageLevels в соответствии с названием уровня из ProjectCapacityPolicy.

Примечание: Подробнее ознакомиться с инструкцией по настройке ProjectCapacityPolicy можно в документе «Autoscaler (AUSC) API Reference» в разделе Спецификация ProjectCapacityPolicy.