
У меня есть управляемая группа экземпляров с автоматическим масштабированием.
Каждый экземпляр запускает программу, которая опрашивает удаленный сайт с вопросом «есть ли у вас работа для меня?» Если ответ «нет», он засыпает на несколько секунд и повторяется. Мы считаем этопраздныйэкземпляр. В противном случае он получает инструкции о том, что делать, отмечает себязанятый, выполняет то, что должен сделать (это может занять от нескольких минут до нескольких часов), возвращает результаты и возвращается к работепраздный.
Я хочу, чтобы автомасштабирование всегда обеспечивало наличие хотя бы одногопраздныйнапример, чтобы он мог взять любую доступную работу. Он не может быть основан на CPU, так как задания могут тратить значительное количество времени, не используя CPU, или у них может не быть достаточного параллелизма, чтобы использовать все ядра, и так далее.
Если бы автомасштабирование могло извлекать данные с произвольного сервера метрик для получения определенной метрики, жизнь была бы простой: на каждом экземпляре уже запущен экспортер узлов Prometheus, поэтому он может экспортировать метрику, напримерзанят, установленный на 0 или 1, который Prometheus затем может агрегировать, добавлять 1 к сумме и экспортировать как метрику, которую может использовать автомасштабатор. Но это невозможно.
Документация Google по использованию метрик Prometheus для автомасштабирования, хотя на нее есть ссылка со страницы GCE MIG, рассказывает только о том, как это сделать дляКубернетесавтомасштабирование, которое я, конечно, здесь не использую.
Я уже думал о том, чтобы экземпляры создавали пользовательскую метрику stackdriver, которую они обновляют, но если экземпляр умрет до обновления своей метрики до 0, она никогда не будет сброшена, поэтому автомасштабирование не узнает об этом.
Это не может быть очень сложным или очень необычным (либо это, либо я не могу придумать правильные термины для поиска :( ). Есть какие-нибудь предложения?