Задать вопрос
AirWorker
@AirWorker
Node.js full stack web dev

Работа с очередями (queue) в Node.js, и уведомления о завершении задач, как?

В web торчит сервер на Ноде, приходят клиенты и просят ответы. Несколько клиентов часто одновременно просят один и тот же ответ.

Формирование каждого ответа - это очень дорогая задача (быстро упираемся в CPU), задачи выполняются в дочерних процессах, долго. Для максимальной производительности одновременно должны быть запущены от 2х до десятка(ов) задач-процессов - сколько конкретно - задается в настройках.

То есть когда web-сервер получает задачу - он ставит ее в очередь на выполнение, и ждет когда будет готово - подписывается на уведомление о завершении этой задачи. На одну задачу могут подписываться несколько обработчиков http-запросов. Когда она будет готова - все они отдают ответ своим клиентам.

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

Состояния задачи - не выполнено/выполнено успешно/выполнено с ошибкой + объект ошибки (типа как промис). Других свойств нет, подписчики знают, откуда брать результаты успешно выполненной задачи.

Паттерн в принципе довольно стандартный, и должны быть уже готовые best practices для Ноды, или хотя бы поделитесь мыслями - куда вообще рыть?

UPD: вроде бы понимание окончательно оформилось:

task = queue.push(taskData(req));
task.on('complete', () => {
// задача выполнена, делаем полезное
}).on('error', err => {
// ошибка, делаем неприятное
});


То есть это очередь EventEmitter'ов, очередь сама разруливает что делать с задачами - добавлять как новую или возвращать существующую. Фиксированное количество воркеров получает задачи из очереди последовательно.
  • Вопрос задан
  • 5641 просмотр
Подписаться 7 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
@YNile
JS Developer
какой паттерн? Не делать на сервере синхронных операций и все)
Ответ написан
@maxtm
Make money, not job
Посмотрите в сторону AMQP. Отлично подойдет Rabbit
У него мощная система поставщиков задач и подписчиков на оные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы