Вы когда-нибудь использовали RabbitMQ и Node.js для длительного процесса? - PullRequest
5 голосов
/ 05 сентября 2011

Я пытаюсь понять, как лучше всего справиться с длительной задачей в Node.js. Очевидно, что выполнение длинного процесса в Node.js не очень хорошая идея, поскольку однопотоковый характер узла.

Я большой поклонник RabbitMQ, поэтому я думал о том, чтобы иметь два сервера узлов с кроликом между ними:

Node.js Web Server <--> RabbitMQ <--> Node.js Backend Worker

Идея, конечно, заключается в том, чтобы никогда не замедлять работу веб-сервера. Обычно я заменял бы внутренний сервер Java, но я стараюсь сохранить все это JS.

Я не программист Node, поэтому я не уверен, что это хорошая идея или вообще возможно? Кто-нибудь пробовал что-то подобное?

1 Ответ

0 голосов
/ 06 сентября 2011

Зависит от того, что вы подразумеваете под «длительным процессом» - чтобы заблокировать Node.JS, вам придется выполнять много вычислений одновременно. Выполнение ввода-вывода (грубо говоря, вызов чего-то, что принимает аргумент обратного вызова) приведет к циклу событий.

Возможно, есть несколько вещей, которые можно было бы сделать на веб-сайте, которые в основном не связаны с вводом / выводом. Например, общение с базой данных - ввод / вывод. Чтение шаблона из файловой системы - ввод / вывод. (Запуск шаблона с данными из базы данных - хорошо, не I / O. Вероятно, не очень дорогой, либо.)

Если у вас есть только два процесса Node.JS, как на диаграмме, ответ каждому клиенту все равно будет продолжаться так же долго, как и в любом случае (время ввода-вывода плюс время вычисления). Однако вы можете получить лучшую пропускную способность, так как вы не будете сериализовать входящие запросы. С другой стороны, запросы могут просто резервироваться в RabbitMQ, что увеличивает вашу пропускную способность в более высокую задержку.

У вас также есть возможность запустить / больше / более одного бэкэнда, чтобы быстрее обрабатывать запросы. Выполнение работы только на веб-сервере, но выполнение нескольких процессов веб-сервера и распределение нагрузки между ними с помощью, скажем, nginx, будет иметь аналогичный эффект.

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