У меня есть управляемая группа экземпляров в проекте в Google Cloud Platform. Моя группа экземпляров использует самые маленькие предопределенные машины, которые предлагает GCP, f1-micro (подробнее здесь: https://cloud.google.com/compute/docs/machine-types#sharedcore)
В моей группе экземпляров включено автомасштабирование со следующими настройками:
gcloud compute instance-groups managed set-autoscaling [my-ig] \
--region us-central1 \
--min-num-replicas=3 \
--max-num-replicas=15 \
--cool-down-period=250 \
--scale-based-on-cpu \
--target-cpu-utilization=0.9
У меня странное поведение, когда после некоторых небольших / коротких пиков использования процессора автомасштабирование решает массово автомасштабировать мои экземпляры, чтобы затем вернуться к исходному числу через несколько минут.
Вот как выглядит график процессора моей группы экземпляров, на этом снимке экрана у группы экземпляров не было автомасштабирования, и у нее есть 3 экземпляра, запускающих мое приложение:
Для меня эти экземпляры не выглядят так, как будто они нуждаются в автомасштабировании, они кажутся стабильными с той мощностью, которую они имеют, и на практике веб-сайт работает очень хорошо.
Вот что Google говорит об этом типе экземпляра vm:
Типы машин f1-micro предлагают возможности пакетного управления, которые позволяют экземплярам использовать дополнительный физический процессор в течение коротких периодов времени. Пакетирование происходит автоматически, когда вашему экземпляру требуется больше физического процессора, чем было выделено изначально. Во время этих всплесков ваш экземпляр будет случайно использовать доступный физический процессор пачками.
Моя проблема:
Мои варианты (я думаю) следующие:
Возможно, вы столкнулись с комбинацией как пакетной способности класса экземпляра f1-micro (который может отправлять загрузку ЦП экземпляра более чем на 100%), так и как Autoscaler справляется с высокой загрузкой процессора.
В периоды высокой загрузки ЦП, если загрузка приближается к 100%, автомасштабирование оценивает, что группа уже может быть сильно перегружена. В этих случаях средство автомасштабирования увеличивает количество виртуальных машин как минимум на 50% или как минимум на 4 экземпляра, в зависимости от того, что больше. Обычно загрузка ЦП в группе управляемых экземпляров не превышает 100%.
Думаю, вы довольно хорошо обрисовали свои варианты. Я бы порекомендовал проверить, можно ли вообще обойтись без автомасштабирования.
Если распределение нагрузки вашего приложения коррелирует с суточным ритмом (отсутствие трафика ночью, высокая нагрузка днем), вы можете настроить размер группы экземпляров полуавтоматически (подумайте о вызове GCE API / gcloud из cron).