【问题标题】:Node Worker Threads vs Heroku WorkersNode Worker 线程与 Heroku Worker
【发布时间】:2020-08-14 18:33:30
【问题描述】:

我试图了解 Node Worker Threads 与 Heroku Workers 之间的区别。

我们有一个 Dyno 用于运行 Express 的主要 API。

为我们的密集任务(例如处理大文件)配备一个单独的工作人员 Dyno 是否有意义。

worker: npm run worker

我们处理的某些文件最大为 20mb,某些进程运行时间超过 30 秒的限制,因此在连接恢复之前终止连接。

那么我可以在工作应用程序中添加节点工作线程来创建子进程来处理请求还是 Heroku 工作程序本身就足够了?

【问题讨论】:

    标签: node.js multithreading heroku service-worker


    【解决方案1】:

    保留单个测功机并对其进行扩展可能更有意义,这意味着多个实例将并行运行。

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

    【讨论】:

    • 对,然后我会像这样设置一个工作进程:worker: npm run worker 基于:devcenter.heroku.com/articles/background-jobs-queueing 我的误解是如何使工作进程在我的 Express APi 中工作。假设一个端点需要做一些密集的工作,我如何确保工作进程处理它?
    • @AndyJamesN - 你有想过这个吗?如果,那么,你能发布一个答案...我遇到同样的事情,可以使用一些帮助
    • @MLissCetrus 是的,我做到了。我已经用我的经验回答了这个问题。
    【解决方案2】:

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

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

    节点工作线程

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

    https://github.com/wilk/microjob

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

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

    重要区别:Heroku Workers 没有!

    Heroku 工人

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

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

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

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

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

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

    【讨论】:

    • 谢谢!!我沿着这条确切的路径走……一个警告是:必须使用 Procfile 来启动所有进程。我试图从 Procfile 启动工作线程,从 Package.json 启动服务器......没有用。这是一个非常微妙的问题,需要很长时间才能弄清楚。 (也就是说,如果您没有使用 Heroku 的示例作为项目模板并将这些东西合并到您自己的项目中)
    • 另一件事...查看 Heroku Package.json 文件中的“开始”...它使用工头! (另一个警告)
    • 我的 Procfile 中有我的 web 和 worker,所以我没有遇到这种情况,所以感谢您填写。Foreman 也很好。我仍在尝试弄清楚如何使用工头设置 VS Code 调试。在这里查看我的问题:stackoverflow.com/questions/61591835/…
    • 安迪...我将发布我所拥有的以及我用来启动的过程...它并不优雅...但它让我调试...(在您的问题中)跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多