node.js - 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 工作线程和 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 提供的入门项目中实现上述所有内容的完美示例。
推荐阅读
- php - 有什么方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用?
- python-3.x - 使用相同的代码和数据,FBProphet 的预测结果大相径庭
- c++ - 迭代器while循环运行额外的循环
- python - 无法在 python 中解析 yaml 文件
- java - Java Spark withColumn - 自定义函数
- git - 如何在 Git 中仅提交不包含缩进空格更改的更改
- python-3.x - 如何将标签文本绑定到 Python Kivy 中的函数?
- c++ - 是否每次未指定对象类型的默认参数时都构造它们?
- deep-learning - 量化模型的 QAT 输出节点具有相同的最小最大范围
- python - 从列表中提取列表并以新格式打印每个列表 - Python 3.6