Можно ли использовать сельдерей для синхронных задач?

Почти синхронные работы тоже; в основном, я хочу делегировать доступ к данным и обработку за веб-приложением в очередь задач для большинства заданий. Какова самая быстрая задержка, которую я могу считать разумной для задач сельдерея?

Обновление (для уточнения)

Я думаю, для ясности я должен объяснить, что пропускная способность — хотя и хорошая — не является необходимой проблемой для меня; Мне пока не понадобится масштабирование в этом направлении. Задержка — единственный критерий, который я буду оценивать в данный момент. Я согласен использовать task.apply, если это единственный способ, которым это будет работать, но я хотел бы немного поработать.


person Chris R    schedule 19.11.2010    source источник
comment
Это действительно зависит от оборудования, сети, брокера и конфигурации. Мне удалось выполнить ~ 1000 задач в секунду (туда и обратно: опубликовать и получить результаты) на моем ядре MacBook Pro 2x. Однако вы не получите этого с конфигурацией по умолчанию, поскольку она оптимизирована для среднего уровня между множеством коротких и некоторых очень длинных задач.   -  person asksol    schedule 19.11.2010
comment
Это звучит как хорошее место для начала; Я могу масштабировать количество рабочих практически бесконечно, поэтому не могли бы вы дать рекомендации о том, как настроить эту конфигурацию с низкой задержкой? У меня есть как короткие (возврат данных для немедленного использования), так и длинные (создание большого отчета) задачи для выполнения, если это имеет значение. В качестве альтернативы, где хороший блог или документ с подробностями о том, как это сделать?   -  person Chris R    schedule 19.11.2010
comment
Вы можете начать с CELERYD_PREFETCH_MULTIPLIER=0 (или увеличить его с 4 по умолчанию до 32/64). Затем есть CELERY_DISABLE_RATE_LIMITS=True, который отключает части оборудования, если вам не нужны ограничения скорости.   -  person asksol    schedule 20.11.2010
comment
Это кажется разумным. Итак, я понимаю, что это означает, что у рабочих уже будут «зарезервированы» для следующей задачи с этой настройкой? Как я могу гарантировать, что результат будет получен с разумной скоростью? Я хочу иметь возможность иметь поведение, близкое к поведению task.apply здесь с точки зрения скорости... получу ли я это с этим?   -  person Chris R    schedule 21.11.2010
comment
При значении 0 резервируется как можно больше задач (даже миллионы), так что это не очень хорошая идея, но вы устанавливаете большое число. Помните, что брокер выполнит повторную доставку задач в случае сбоя рабочего процесса.   -  person asksol    schedule 22.11.2010
comment
Вы никогда не получите такой же скорости, как с .apply, так как вам нужно отправить задачу в виде сообщения, есть задержка в сети и так далее. Но если использовать серверную часть amqp, то передача туда и обратно будет очень короткой. Просто убедитесь, что очередь обрабатывается достаточно быстро и что в ней не так много задач для обработки.   -  person asksol    schedule 22.11.2010


Ответы (1)


Когда я говорю throughput, я имею в виду среднюю задержку от отправки задачи до ее выполнения. Под roundtrip я подразумеваю среднее время, необходимое для отправки задачи, ее выполнения, отправки результата обратно и получения результата.

Как я сказал в комментариях, в настоящее время у меня нет официальных цифр, которыми я мог бы поделиться, но при правильной конфигурации Celery имеет низкую задержку по сравнению со многими другими решениями, но все же требует больше накладных расходов, чем локальное выполнение функции. Это следует учитывать при разработке детализации задачи[1].

В настоящее время я пишу руководство по производительности, которое может представлять интерес: http://ask.github.com/celery/userguide/optimizing.html

Мы приветствуем обратную связь и хотели бы знать о любых других факторах производительности, которые вас интересуют.

[1] http://celeryq.org/docs/userguide/tasks.html#granularity< /а>

person asksol    schedule 23.11.2010