Heroku中的进程类型和Dynos有啥区别

Posted

技术标签:

【中文标题】Heroku中的进程类型和Dynos有啥区别【英文标题】:What is the difference between Process Types and Dynos in HerokuHeroku中的进程类型和Dynos有什么区别 【发布时间】:2018-03-14 18:00:10 【问题描述】:

我在 Heroku 中订阅了一个爱好计划。

该计划的详细信息指定它最多允许 10 种流程类型。

所以我用以下 Procfile 开发了一个应用程序:

backend-dev: node ./backend-dev/backend.js
backend-prod: node ./backend-prod/backend.js

代表 2 种进程类型,对吧?

但是当我运行它时:

heroku ps:scale backend-dev=1
heroku ps:scale backend-prod=1

我最终得到了两个 Hobby Dynos... 由于该计划还指定 7 欧元/月/Dyno,因此我需要支付 14 欧元/月的费用。

所以我的问题是:

    进程类型和 Dynos 有什么区别? 我可以在一个 Dyno 中运行 2 个进程类型吗? 我可以运行 1 个免费的 Dyno(用于后端开发)和 1 个 Hobby Dyno(用于后端产品)吗?

【问题讨论】:

【参考方案1】:

    考虑这个简单的带有后台工作程序的 Web 应用程序示例,它有 web 进程和 worker 进程。当此类应用程序接收到大量网络流量,但处理的后台作业很少时,您可以增加 web 进程的 dyno 数量,但 worker 进程只有一个 dyno。每个过程也可以有不同的测功机大小。您可以将 performance-l dyno 用于web 进程,将standard-1x 用于worker 进程,而不是使用更多的测功机。换句话说,进程类型描述了在一个应用程序中协同工作的不同进程。它们不应该像您的情况那样是不同的应用程序。

    没有。您可以在多个测功机上运行一种进程类型。

    从技术上讲,您可以在免费测功机上运行一个进程,在业余爱好上运行另一个进程,但它不适用于您的情况。升级到专业测功机后,所有流程都必须在专业测功机上运行。

您的Procfile 完全错误。您必须拥有进程类型名称 web 才能接收 Web 流量。如果您启动当前设置,您将运行两个进程,但它们永远不会收到任何 Web 请求。 Heroku 文档中对此进行了描述,只有web 进程可以接收网络流量,并且您只能拥有一个这样的进程。因此,要运行两个版本的应用程序,您需要创建两个不同的 Heroku 应用程序。理想情况下,您应该允许通过环境变量配置您的应用程序,以便您可以将相同的代码部署到两个应用程序。

【讨论】:

谢谢,但我的应用不应该接收网络请求,因为它们实际上是在监听 Firebase 数据库中的更改。

以上是关于Heroku中的进程类型和Dynos有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 springboot-gradle 为多 Web 服务器设置 dynos 和 procfile

使用 socket.io-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos

我是不是也必须为 Heroku 上的 staging 应用程序购买 dynos?

将 Django 应用程序推送到 Heroku 后,Dynos 字段为空白

如何在 Heroku 上使用 Node.js 通信 Web 和 Worker dynos?

Heroku 免费帐户,一次性 dynos