首页 > 解决方案 > Node Worker Threads vs Heroku Workers

问题描述

I'm trying to understand difference between Node Worker Threads vs Heroku Workers.

We have a single Dyno for our main API running Express.

Would it make sense to have a separate worker Dyno for our intensive tasks such as processing a large file.

worker: npm run worker

Some files we process are up to 20mb and some processes take longer than the 30s limit to run so kills the connection before it comes back.

Then could I add Node Worker Threads in the worker app to create child processes to handle the requests or is the Heroku worker enough on its own?

标签: node.jsmultithreadingherokuservice-worker

解决方案


在深入研究并成功实施工人解决原始问题之后,这里是遇到相同情况的任何人的摘要。

Node 工作线程和 Heroku 工作线程的相似之处在于它们打算在 Node 中不阻塞主线程的单独线程上运行代码。您如何使用和实施它们会有所不同,并且取决于用例。

节点工作线程

这些是在 NODE 上创建集群环境的新方法。您可以按照 NODE 文档创建工作人员或使用 microjob 之类的工具来更轻松地为特定任务设置和运行单独的 NODE 线程。

https://github.com/wilk/microjob

这很好用,而且效率更高,因为它们将在单独的工作线程上运行,防止 I/O 阻塞。

在 Web 进程上的 Heroku 上使用工作线程并不能解决我的问题,因为在查询达到 30 秒后 Web 进程仍然超时。

重要区别:Heroku 工人不要!

Heroku 工人

这些是 Heroku 上单个应用程序中单独的虚拟 Dyno 容器。它们是独立的进程,运行时没有 Web 进程运行的所有开销,例如 http。

Worker 不监听 HTTP 请求。如果您将 Express 与 NODE 一起使用,则需要一个 Web 进程来处理传入的 http 请求,然后需要一个 Worker 来处理作业。

挑战在于如何在 Web 和工作进程之间进行通信。这是通过同时使用 Redis 和 Bull Query 来存储数据并在进程之间发送消息来完成的。

最后,Throng 可以更轻松地使用 Procfile 创建集群环境,因此非常适合与 Heroku 一起使用!

这是一个在 Heroku 提供的入门项目中实现上述所有内容的完美示例。

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


推荐阅读