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