Как ограничить (или очередь) призывы к внешним процессам в Node.js?

Сценарий

У меня есть служба Node.js (написана с использованием Expressjs ), которое принимает загрузку изображений через DND ( пример ). После того, как изображение загружено, я делаю ему несколько вещей:

  1. Потяните данные exif из него
  2. Изменить его

Эти вызовы обрабатываются через модуль Node-ImageMagick модуль в данный момент И мой код выглядит что-то подобное:

app.post('/upload', function(req, res){
  ...  ....

  im.readMetadata('./upload/image.jpg', function(err, meta) {
      // handle EXIF data.
  });

  im.resize(..., function(err, stdout, stderr) {
      // handle resize.
  });
});

Вопрос

Как некоторые из вас уже замечены, проблема в том, что если я получу достаточно одновременных загрузки, каждый из этих загрузок будет вызывать «идентичность», а затем операция изменений (Из Image Magick), эффективно убивая сервер под высокой нагрузкой.

Просто тестирование с AB -C 100 -N 100 блокирует мой маленький 512 Lineode DEV Server UP, чтобы я должен заставить перезагрузку. Я понимаю, что мой тест может быть просто слишком большим нагрузкой для сервера, но я хотел бы более надежный подход к обработке этих запросов, поэтому у меня есть более изящный отказ, то общий объем самоубийства VM.

В Java I решил эту проблему , создав управление с фиксированной резьбой, который покидает работу и выполняет ее на уровне x количество потоков.

В Node.js я даже не уверен, что начать решать такую ​​проблему. У меня не совсем мой мозг, обернутый вокруг нерезной природы, и то, как я могу создать функцию async JavaScript, которая вправляет работу в то время как другая ... (поток?) Обрабатывает очередь.

Любые указатели на том, как подумать об этом или как подойдут к этому будет оценено.

Дополнение

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

8
задан Community 23 May 2017 в 11:52
поделиться