2013-02-20 1 views
19

Простите мое невежество, но, исходя из фона Django/Python, я вижу огромное преимущество наличия очереди Celery, работающей на более медленных процессах в фоновом режиме, в то время как веб-интерфейс обновляется как можно быстрее.Узел Работники JS - любая потребность в них?

Однако, с узлом, работающим асинхронно, используется прецедент для системы очереди значительно уменьшен?

Например:

1 - это сообщения пользователя что-то на сайте, 2 - сайт отвечает, то почту администратору.

В Django вы отправите почту администратора заданию, которое будет выполнено позже, а затем ответьте на запрос. Сельдерей отправляет почту в фоновом режиме.

В узле вы вызываете свою почтовую программу, а затем отвечаете на запрос. Затем почтовая программа отправляет обратный вызов, чтобы сказать DONE или нет, после чего пользователь уже просматривает ответ.

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

Или я не понимаю, как это работает !?

ответ

7

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

Так что если ваши задачи занимают некоторое время для обработки процессора, возможно, все же стоит использовать внешнюю очередь и отдельный процесс для обработки этих задач/сообщений. Если ваши задачи неактивны и требуют некоторого времени, потому что они ждут ответов от других серверов, например, снова возникает потребность, поскольку узел отлично справляется с io.

Если у вас есть задача с интенсивным процессором, но вы не хотите развертывать очередь, вы можете просто создать больше процессов узлов и экземпляров компьютеров и сбалансировать нагрузку на них, что позволит им обрабатывать эти задачи. Недостатком такого подхода является то, что вы не можете масштабировать веб-сайт и обработку фона отдельно. (например, 5 экземпляров, связанных с веб-запросами и 2 экземплярами работников)

+1

Так что, если бы я хотел сделать что-то вроде вызова внешнего API для извлечения пользователей информация - например. сделайте некоторое обратное геокодирование с запросом на геокодер Google. Этот запрос не остановит мой процесс Node для следующего входящего запроса? Но если бы было много использования ЦП, это было бы ...? –

+1

Вам нужно будет сравнить его, но да. Это примерно идея. Посмотрите здесь, чтобы получить представление о том, сколько можно сделать, ожидая операции io: http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html. Узел делает только 1 вещь за раз, поэтому, если это число хруст, он не может обслуживать запросы.Как только вы сделаете какой-либо io, вы освободите узел, чтобы уйти и сделать другие вещи. – AndyD

+3

Перефразируя для (маргинальной) ясности: если ваше параллельное выполнение связано с большим ожиданием возврата запросов HTTP или файловой системы, то встроенный асинхронный ввод-вывод узла будет достаточным для вас параллелизмом. Если ваше параллельное выполнение включает в себя запуск больших вычислений локально (транскодирование видео, запуск симуляции), то однопоточная природа узла вытолкнет вас, и вам, возможно, придется открутить работу к работнику. – Dave

4

Нет, всегда есть случаи для очередей, даже в мире узлов. Основной подход, который я видел, когда несколько человек используют в разной степени успеха, использует резервную копию Redis для хранения сообщений или задач. У вас может быть один процесс Node, добавляющий элементы в очередь, с другими элементами обработки экземпляров узла из очереди. Кроме того, посмотрите список модулей узлов для queue modules, и вы увидите приличное количество реализаций.

+0

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

Смежные вопросы