Я делаю удаленные вызовы API для данных, которые иногда могут занимать более 30 секунд. Ответом на проблему тайм-аута в Heroku было поместить задачи в очередь и заставить работника обрабатывать задание, пока клиент периодически проверяет, выполнено ли задание. Если нет, то отправляется ответ о том, что данные не готовы, если они передаются клиенту для отображения.
Проблема, с которой я столкнулся сейчас, заключается в том, что если у меня только один работник, то работа, которая занимает всего 3 секунды, может застрять за работой, которая занимает 2 минуты. Рабочие места будут расти, и приложение будет непригодным для использования. Я плачу за 1 стандартную веб-версию x1 и 1 стандартную рабочую версию x1. Могу ли я иметь только одного работника на одного работника dyno? Это кажется сумасшедшим. Если это так, мне пришлось бы заплатить, по крайней мере, еще несколько динамовцев, чтобы приложение функционировало должным образом. Могу ли я иметь несколько рабочих, которые существуют в пределах одного рабочего dyno? Если да, то как мне это сделать?
Я могу раскрутить более одного работника, объявив мой Procfile следующим образом:
web: node src/app.js
worker: node src/workers/worker.js & node src/workers/worker2.js & node src/workers/worker3.js
Это выглядит как хакерский способ обойти эту проблему, и теперь у тех, кто работает, у моего dyno будут другие проблемы, такие как нехватка памяти, если я получу несколько больших наборов данных одновременно.
Ожидаемое: Я должен иметь возможность раскрутить несколько рабочих в одном рабочем динамо на Героку.
Факт: Я могу (см. Как в моем Procfile выше), но я не думаю, что я делаю это правильно, и это вызывает проблемы в моем приложении.