单个 Heroku 应用程序上的多个工作程序/Web 进程
Posted
技术标签:
【中文标题】单个 Heroku 应用程序上的多个工作程序/Web 进程【英文标题】:multiple worker/web processes on a single heroku app 【发布时间】:2014-05-24 05:40:37 【问题描述】:是否有某种方法可以配置多个工作程序和/或 Web 进程以在单个 Heroku 应用程序容器中运行?还是必须将其分解为多个 Heroku 应用程序?
例如:
worker: node capture.js
worker: node process.js
worker: node purge.js
web: node api.js
web: node web.js
【问题讨论】:
为了进一步澄清,当我尝试执行此操作时,所有 js 文件都已执行,但它们在工头下显示为同一个进程(例如 worker.1 和 web.1)。我有兴趣让它们在自己的测功机上运行,这样我就可以单独控制它们的缩放。 【参考方案1】:所有进程都必须有唯一的名称。 此外,名称 唯一具有重要名称的进程是 web
和 worker
无关紧要,没有特殊含义。web
进程,如 Heroku 文档中所述: p>
Web 进程类型是特殊的,因为它是唯一的进程类型 将从 Heroku 的路由器接收 HTTP 流量。其他工艺类型 可以任意命名。 -- (https://devcenter.heroku.com/articles/procfile)
所以你想要一个像这样的Procfile
:
capture: node capture.js
process: node process.js
purge: node purge.js
api: node api.js
web: node web.js
然后您可以单独扩展每个流程:
$ heroku ps:scale purge=4
【讨论】:
看来你是对的,worker没有特殊含义,但只有名为“web”的进程才会响应web请求。如果您更新答案,我会接受。这很有帮助。 在这个例子中,有没有办法将流量路由到“api”进程? 看起来我们必须有一个“网络”代理,将/api/*
请求流式传输到“api”工作程序,并将所有其他请求流式传输到“应用程序”工作程序。当这些工人有多个实例时,这可能会变得有点复杂;然后,您需要实施或 npm-install 负载均衡器。或者,您可以只运行多个 Heroku 应用程序,但现在存储库组织变得有点复杂(子模块?)。
Heroku 已经实现了负载均衡器。 Worker 在不影响 Web Worker 的单独 CPU 上运行,因此您可以使用 rabbitmq 并将工作发送给 worker,然后使用 Redis 之类的东西进行通信。如果您使用的是 nodejs,您还可以集群您的应用程序以利用更多 CPU,但要注意您的 RAM。
我之前做过这个测试,将使用 Procfile 中唯一名称的最后声明。例如,我尝试运行两个不同 php 文件的两个名为 worker
的测功机和一个 web
测功机。如果您要保持计数,那应该是 3 个测功机,但只有两个被激活。 worker
dyno 正在运行第二个声明中的 PHP 脚本,但是当我将它们命名为 worker1
和 worker2
时,我最终得到了我试图使用的所有 dyno。以上是关于单个 Heroku 应用程序上的多个工作程序/Web 进程的主要内容,如果未能解决你的问题,请参考以下文章