具有多个工作人员的 Heroku Procfile
Heroku Procfile with multiple workers
我有一个带有 1 个网络测功机、7 个后台队列和 1 个时钟的应用程序。我想使用 Heroku Standard 1x 计划,因为它包含无限的后台工作人员(未来队列数量可能会进一步增加)。当我部署我的应用程序时,procfile 似乎没有按照我预期的方式进行配置。显示了三个测功机,看来我必须为每个 worker/clock.
购买一个额外的标准 1x 测功机
过程文件:
web: flask db upgrade; gunicorn webapp:app
worker: rq worker -u $REDIS_URL high default low
worker: rq worker -u $REDIS_URL r1
worker: rq worker -u $REDIS_URL r2
worker: rq worker -u $REDIS_URL bg1
worker: rq worker -u $REDIS_URL bg2
worker: rq worker -u $REDIS_URL bg3
worker: rq worker -u $REDIS_URL bg4
clock: python clock.py
Heroku 显示 3 个测功机:
- 1x 网络(启用,scale:1,标准 1x)
- 1x 工人“bg4”(规模:0)
- 1x 时钟(比例:0)
我应该如何构造 Procfile 以利用 Standard 1x dyno 中包含的后台工作程序?
首先,我构建 procfile 的方式有误。每个“工人”的名字都应该不同。我认为“worker”这个词对于 Heroku 配置有一些特殊的含义;它没有。所以 Procfile 应该看起来像这样:
web: flask db upgrade; gunicorn webapp:app
worker1: rq worker -u $REDIS_URL high default low
worker2: rq worker -u $REDIS_URL r1
worker3: rq worker -u $REDIS_URL r2
worker4: rq worker -u $REDIS_URL bg1
foo_worker5: rq worker -u $REDIS_URL bg2
more_worker6: rq worker -u $REDIS_URL bg3
another_worker7: rq worker -u $REDIS_URL bg4
clock: python clock.py
其次,我的实际问题的答案(感谢 Heroku 支持团队)是每个额外的工作进程都需要一个单独的 Dyno。我觉得 Heroku 定价页面上的措辞有点误导。
支持团队能够澄清:
In this context, "unlimited background workers" means you can run as
many worker processes as you need to. On the lower tiers(free and
hobby), the number of worker processes that can be used is limited.
However, Heroku is built on a 1-process-per-dyno model, which means
every worker needs to run on its own dyno. So you will be charged for
1 dyno for each worker process you use. To say it a different way,
it's not "unlimited worker processes for /mon", but instead it's
"run unlimited worker processes at /mon each".
基本上,免费层最多可以有 2 个测功机,业余爱好最多可以有 10 个,生产层可以有任意数量。
我有一个带有 1 个网络测功机、7 个后台队列和 1 个时钟的应用程序。我想使用 Heroku Standard 1x 计划,因为它包含无限的后台工作人员(未来队列数量可能会进一步增加)。当我部署我的应用程序时,procfile 似乎没有按照我预期的方式进行配置。显示了三个测功机,看来我必须为每个 worker/clock.
购买一个额外的标准 1x 测功机过程文件:
web: flask db upgrade; gunicorn webapp:app
worker: rq worker -u $REDIS_URL high default low
worker: rq worker -u $REDIS_URL r1
worker: rq worker -u $REDIS_URL r2
worker: rq worker -u $REDIS_URL bg1
worker: rq worker -u $REDIS_URL bg2
worker: rq worker -u $REDIS_URL bg3
worker: rq worker -u $REDIS_URL bg4
clock: python clock.py
Heroku 显示 3 个测功机:
- 1x 网络(启用,scale:1,标准 1x)
- 1x 工人“bg4”(规模:0)
- 1x 时钟(比例:0)
我应该如何构造 Procfile 以利用 Standard 1x dyno 中包含的后台工作程序?
首先,我构建 procfile 的方式有误。每个“工人”的名字都应该不同。我认为“worker”这个词对于 Heroku 配置有一些特殊的含义;它没有。所以 Procfile 应该看起来像这样:
web: flask db upgrade; gunicorn webapp:app
worker1: rq worker -u $REDIS_URL high default low
worker2: rq worker -u $REDIS_URL r1
worker3: rq worker -u $REDIS_URL r2
worker4: rq worker -u $REDIS_URL bg1
foo_worker5: rq worker -u $REDIS_URL bg2
more_worker6: rq worker -u $REDIS_URL bg3
another_worker7: rq worker -u $REDIS_URL bg4
clock: python clock.py
其次,我的实际问题的答案(感谢 Heroku 支持团队)是每个额外的工作进程都需要一个单独的 Dyno。我觉得 Heroku 定价页面上的措辞有点误导。
支持团队能够澄清:
In this context, "unlimited background workers" means you can run as many worker processes as you need to. On the lower tiers(free and hobby), the number of worker processes that can be used is limited.
However, Heroku is built on a 1-process-per-dyno model, which means every worker needs to run on its own dyno. So you will be charged for 1 dyno for each worker process you use. To say it a different way, it's not "unlimited worker processes for /mon", but instead it's "run unlimited worker processes at /mon each".
基本上,免费层最多可以有 2 个测功机,业余爱好最多可以有 10 个,生产层可以有任意数量。