Темы рабочих узлов против рабочих Heroku - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь понять разницу между рабочими потоками узлов и рабочими Heroku.

У нас есть один Dyno для нашего основного API, работающий Express.

Имеет ли смысл иметь отдельный рабочий Dyno для наших интенсивных задач, таких как обработка большого файла.

worker: npm run worker

Некоторые файлы, которые мы обрабатываем, имеют размер до 20 МБ, а некоторым процессам требуется больше, чем 30-секундный предел, поэтому разрывается соединение, прежде чем оно возвращается.

Тогда я мог бы добавить рабочие потоки узла в рабочем приложении для создания дочерних процессов для обработки запросов или рабочий Heroku достаточно сам по себе?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

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

Рабочие потоки узла и рабочие Heroku похожи в том, что они намеревались запускать код в отдельных потоках в узле, которые не блокируют основной поток. То, как вы их используете и реализуете, отличается и зависит от варианта использования.

Рабочие потоки узла

Это новый способ создания кластеризованных сред на NODE. Вы можете следовать документам NODE для создания рабочих или использовать что-то вроде микроджоба, чтобы упростить настройку и запуск отдельных потоков NODE для конкретных c задач.

https://github.com/wilk/microjob

Это прекрасно работает и будет намного эффективнее, поскольку они будут работать в отдельных рабочих потоках, предотвращая блокировку ввода-вывода.

Использование рабочих потоков в Heroku в веб-процессе не решило мою проблему, так как Интернет время ожидания запроса по истечении 30 секунд.

Важное отличие: рабочие Heroku не делают!

Workers Heroku

Это отдельные виртуальные контейнеры Dyno в Heroku в пределах одно приложение. Это отдельные процессы, которые выполняются без всех накладных расходов, выполняемых веб-процессом, например http.

Рабочие не слушают HTTP-запросы. Если вы используете Express с NODE, вам нужен веб-процесс для обработки входящих HTTP-запросов, а затем рабочий для обработки заданий.

Задача состояла в том, чтобы выяснить, как взаимодействовать между сетью и рабочими процессами. Это делается с помощью Redis и Bull Query для хранения данных и отправки сообщений между процессами.

Наконец, Throng упрощает создание кластерной среды с использованием Procfile, поэтому он идеально подходит для использования с Heroku!

Вот прекрасный пример, который реализует все вышеперечисленное в стартовом проекте, который Heroku сделал доступным.

https://devcenter.heroku.com/articles/node-redis-workers

1 голос
/ 30 апреля 2020

Для вас может иметь больше смысла сохранять один динамометр и увеличивать его, что означает, что несколько экземпляров будут работать параллельно.

См. https://devcenter.heroku.com/articles/scaling

...