Мой вариант использования сельдерея: развернуть кластер рабочих сельдерея и отправить много задач в этот кластер, а затем завершить кластер, когда все задачи будут выполнены (обычно ~ 2 часа).
Я сейчас настроить его для использования параллелизма по умолчанию, что не оптимально для моего варианта использования. Я вижу, что можно указать аргумент --concurrency
в сельдерее , который указывает количество задач, которые рабочий будет запускать параллельно. Это также не идеально для моего варианта использования, потому что, например:
- кластер A может иметь задачи с очень интенсивным использованием памяти, а
--concurrency=1
имеет смысл, но - кластер B может быть индикатор памяти, а
--concurrency=50
оптимизирует моих рабочих.
Поскольку я очень часто использую эти кластеры для самых разных типов задач, я не хочу вручную профилировать задачу заранее и вручную каждый раз устанавливать параллелизм.
Мое желаемое поведение - иметь пороги памяти. Так, например, я могу установить в файле конфигурации:
min_worker_memory = .6
max_worker_memory = .8
Это означает, что рабочий будет увеличивать concurrency
на 1, пока рабочий не превысит порог использования более 80% памяти. Затем он уменьшит параллелизм на 1. Он сохранит этот параллелизм в течение всего срока службы кластера, если рабочая память не упадет ниже 60%, после чего он снова увеличит параллелизм на 1.
Существуют ли какие-либо существующие настройки сельдерея, которые я могу использовать для этого, или мне придется реализовать этот logi c самостоятельно? максимальный объем памяти на ребенка кажется несколько близким к тому, что я хочу, но это заканчивается убитыми процессами, что не то, что я хочу.