Мне нужно масштабировать набор модулей, в которых работают работники на основе очередей.Работа для рабочих может выполняться долго (часы) и не должна прерываться.Количество стручков зависит от длины рабочей очереди.Для масштабирования можно использовать либо горизонтальное автоматическое масштабирование с использованием пользовательских метрик, либо простой контроллер, который изменяет количество реплик.
Проблема с любым из решений заключается в том, что при уменьшении масштаба нет никакого контроля над тем, какие модулиполучить прекращено.В любой момент времени большинство работников, вероятно, работают над краткосрочными заданиями, в режиме ожидания или (реже) обрабатывают долго выполняемые задания.Я хотел бы избежать убийства долгосрочных рабочих, бездействующие или краткосрочные рабочие могут быть прекращены без проблем.
Каков был бы способ сделать это с низкой сложностью?Одна вещь, о которой я могу подумать, - это сделать это на основе использования процессором модулей.Не идеально, но это может быть достаточно хорошо.Другой способ может заключаться в том, чтобы работники каким-то образом выставляли приоритет, указывающий, являются ли они предпочтительным модулем, который нужно удалить.Этот приоритет может меняться каждый раз, когда работник выбирает новое задание.
В конечном итоге все задания будут краткосрочными, и эта проблема исчезнет, но пока это долгосрочная цель.