Сельдерей: динамически распределять параллелизм на основе рабочей памяти - PullRequest
1 голос
/ 03 августа 2020

Мой вариант использования сельдерея: развернуть кластер рабочих сельдерея и отправить много задач в этот кластер, а затем завершить кластер, когда все задачи будут выполнены (обычно ~ 2 часа).

Я сейчас настроить его для использования параллелизма по умолчанию, что не оптимально для моего варианта использования. Я вижу, что можно указать аргумент --concurrency в сельдерее , который указывает количество задач, которые рабочий будет запускать параллельно. Это также не идеально для моего варианта использования, потому что, например:

  • кластер A может иметь задачи с очень интенсивным использованием памяти, а --concurrency=1 имеет смысл, но
  • кластер B может быть индикатор памяти, а --concurrency=50 оптимизирует моих рабочих.

Поскольку я очень часто использую эти кластеры для самых разных типов задач, я не хочу вручную профилировать задачу заранее и вручную каждый раз устанавливать параллелизм.

Мое желаемое поведение - иметь пороги памяти. Так, например, я могу установить в файле конфигурации:

min_worker_memory = .6
max_worker_memory = .8

Это означает, что рабочий будет увеличивать concurrency на 1, пока рабочий не превысит порог использования более 80% памяти. Затем он уменьшит параллелизм на 1. Он сохранит этот параллелизм в течение всего срока службы кластера, если рабочая память не упадет ниже 60%, после чего он снова увеличит параллелизм на 1.

Существуют ли какие-либо существующие настройки сельдерея, которые я могу использовать для этого, или мне придется реализовать этот logi c самостоятельно? максимальный объем памяти на ребенка кажется несколько близким к тому, что я хочу, но это заканчивается убитыми процессами, что не то, что я хочу.

1 Ответ

1 голос
/ 03 августа 2020

К сожалению, Celery не предоставляет Autoscaler , который масштабируется вверх / вниз в зависимости от использования памяти. Однако, будучи хорошо продуманным программным обеспечением, оно дает вам интерфейс, который вы можете реализовать так, как вам нравится. Я уверен, что с помощью пакета psutil вы легко сможете создать свой собственный инструмент автомасштабирования. Ссылка на документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...