В настоящее время у нас есть конвейер потоковой передачи данных: вызов API -> Google Pub / Sub -> BigQuery.Количество вызовов API будет зависеть от трафика на сайте.
Мы создаем развертывание kubernetes (в GKE) для загрузки данных из pub / sub в BigQuery.В этом развертывании есть горизонтальный модуль автоматического масштабирования (HPA) с metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
и targetValue: "5000"
.Эта структура способна автоматически масштабироваться при внезапном увеличении трафика.Тем не менее, это вызовет масштабируемость spiky.
То, что я имел в виду под spiky, выглядит следующим образом:
- Количество непрочитанных сообщений увеличится больше целевого значения
- Автоскалер увеличит количество стручков
- Поскольку количество непакетированных будет медленно уменьшаться, но, поскольку оно все еще выше целевого значения, автоскалер будет увеличивать количество стручков -> это будет происходить, пока мы не нажмеммаксимальное количество стручков в автоскальсере
- Количество неупакованных будет уменьшаться до тех пор, пока оно не опустится ниже целевого значения, и останется очень низким
- Автоскалер уменьшит количество стручков до минимального количестваpods
- Количество неупакованных сообщений снова увеличится, и будет идти аналогичная ситуация с (1), и оно войдет в цикл / цикл всплесков
Вот диаграмма, когда этостановится остроконечным (трафик растет, но он стабилен и не остроконечен): заостренный номер неподтвержденного сообщения в pub / sub
Мы установилиТревога в стекдрайвере, если количество неподтвержденных сообщений превышает 20 Кб, и в этом случае оно всегда будет вызываться часто.
Есть ли способ сделать HPA более стабильным (не колючим) в этом случае?
Любые комментарии, предложения или ответы приветствуются.
Спасибо!