Подтвердить что ты не робот

Разница в сельдерея между concurrency, работниками и автомасштабированием

В моем конфигурационном файле /etc/defaults/celeryd я установил:

CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"

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

Задачи имеют большую полезную нагрузку (около 20-50 кБ), и есть около 2-3 миллионов таких задач, но каждая задача выполняется менее чем за секунду. Я вижу, как память использует всплеск, потому что брокер распределяет задачи каждому работнику, тем самым повторяя многократно полезную нагрузку.

Я думаю, что проблема в конфигурации и что комбинация рабочих + concurrency + автомасштабирование является чрезмерной, и я хотел бы лучше понять, что делают эти три варианта.

4b9b3361

Ответ 1

Проведите различие между рабочими и рабочими процессами. Вы порождаете работника сельдерея, тогда возникает множество процессов (в зависимости от таких вещей, как --concurrency и --autoscale, по умолчанию задано как количество процессов, как ядра на машине). Нет смысла запускать более одного рабочего на конкретной машине, если вы не хотите выполнять маршрутизацию.

Я бы предложил запустить только 1 рабочего на машину с числом процессов по умолчанию. Это уменьшит использование памяти, устраняя дублирование данных между работниками.

Если у вас все еще есть проблемы с памятью, сохраните данные в хранилище и передайте только идентификатор рабочим.