Как работает сельдерей?
Недавно я начал работать над распределенными вычислениями для увеличения скорости вычислений. Я выбрал Сельдерей. Однако я не очень знаком с некоторыми терминами. Итак, у меня есть несколько связанных вопросов.
Что такое очередь задач?
...
Сельдерей общается через сообщения, обычно используя посредника для посредничества между клиентами и работниками. Чтобы инициировать задачу, клиент добавляет сообщение в очередь, затем посредник доставляет это сообщение работнику.
Какие клиенты (здесь)? Кто такой брокер? Почему сообщения доставляются через брокера? Зачем Celery использовать бэкэнд и очереди для межпроцессного взаимодействия?
Когда я выполняю консоль Celery, выполнив команду
celery worker -A tasks --loglevel=info --concurrency 5
Означает ли это, что консоль Celery - это рабочий процесс, который отвечает за 5 различных процессов и отслеживает очередь задач? Когда новая задача помещается в очередь задач, назначает ли этот работник задачу / задание любому из 5 процессов?
2 ответа
Последний вопрос первый:
celery worker -A tasks --loglevel=info --concurrency 5
Вы правы - работник контролирует 5 процессов. Работник распределяет задачи по 5 процессам.
"Клиент" - это любой код, который выполняет задачи сельдерея асинхронно.
Есть 2 разных типа общения - при запуске apply_async
Вы отправляете запрос задачи брокеру (чаще всего rabbitmq) - это, по сути, набор очередей сообщений.
Когда рабочие заканчивают, они помещают свои результаты в бэкэнд результата.
Брокер и бэкэнд-результаты совершенно разные и для оптимального функционирования требуется различное программное обеспечение.
Вы можете использовать RabbitMQ для обоих, но как только вы достигнете определенного количества сообщений, он не будет работать должным образом. Наиболее распространенной комбинацией является RabbitMQ для брокера и Redis для результатов.
Мы можем провести аналогию с упаковкой сборочной линии на заводе, чтобы понять, как работает сельдерей.
- Каждое изделие размещается на конвейерной ленте.
- Продукция обрабатывается машинами.
- В конце все обработанные продукты хранятся в одном месте один за другим.
Сельдерей работает:
Примечание. Вместо того, чтобы брать каждый продукт для обработки по мере его размещения на конвейерной ленте, в сельдерее поддерживается очередь, выходные данные которой будут подаваться рабочему для выполнения по одному для каждой задачи (иногда поддерживается более одной очереди).
- Каждый запрос (который является задачей) отправляется в очередь (Redis/Rabbit MQ), а подтверждение отправляется обратно.
- Каждая задача назначается определенному работнику, который выполняет задачу.
- После того, как рабочий завершит задачу, его выходные данные сохраняются в серверной части результатов (Redis).