Использование сервисных работников в приложении Node Express с Heroku для интенсивных задач - PullRequest
0 голосов
/ 30 апреля 2020

Ключевые точки

  • Узел & Express Backend
  • Развертывание в Heroku

Одна конкретная конечная точка считывает и обрабатывает большие json файл и затем индексирует данные в ElasticSearch.

exports.bulk = catchAsync(async (req, res) => {
  const body = await fs.readJson('large-json-file.json');

  await client.bulk(body);

  res.status(200).json({
    status: 'success',
    message: 'Successfully Merged & Indexed Data',
  });
});

Для больших файлов время запроса истекает через 30 с. Ошибка Heroku - H12, это ясно объясняет проблему.

https://devcenter.heroku.com/articles/error-codes#h12 -request-timeout

Время выполнения большого запроса elasti c на больших Индексы значительно выше 30 с и могут смягчить кластер elasti c. Мы частично решили эту проблему, разбивая данные на файлы меньшего размера по индексу 1.

Моя цель сейчас - переложить эту трудную задачу на работников. Мои исследования привели меня к использованию рабочих динамов в heroku и, возможно, рабочих потоков нод, что, кажется, имеет смысл.

https://devcenter.heroku.com/articles/background-jobs-queueing https://nodejs.org/api/worker_threads.html

Но есть некоторые области, в которых я не уверен.

Объединяю ли я рабочий код в свой текущий серверный репозиторий и устанавливаю его в свой Procfile следующим образом? А затем использовать рабочие потоки / рабочие потоки для запуска и запуска рабочих?

web: npm run web
worker: npm run worker

Если да, то как мне реализовать рабочие потоки, запускаемые при вызове моей массовой конечной точки, и возвращать результаты после выполнения рабочего ?


Или если я запускаю его как отдельное репо и динамо с собственным Procfile и Express сервером и конечной точкой и просто вызываю эту конечную точку из основного API?

worker: npm run worker
* 1042 Я явно все еще скучаю по некоторым частям головоломки, поэтому любая помощь будет признательна.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...