【问题标题】:Can the same dyno run multiple processes?同一个测功机可以运行多个进程吗?
【发布时间】:2017-08-07 19:10:01
【问题描述】:

我正在创建运行多个微服务的小型应用程序。我想让这个应用程序 24/7 可用,所以免费的测功时间对我来说是不够的。如果我升级到hobby 计划,我会得到10 Process Types。

我可以在每个进程(Web)上运行另一个微服务,还是 Heroku 让我只能为每个 dyno 安装一个 Web 进程,而另一个 10 process types 用于扩展我的应用程序?换句话说,如果我需要 6 个 24/7 运行的微服务,我应该购买 6 个爱好测功机吗?

【问题讨论】:

    标签: amazon-web-services heroku microservices


    【解决方案1】:

    您只能有 1 种 Web 进程类型。您可以水平扩展您的 Web 进程以在多个测功机上运行(“水平可伸缩性”),但是您需要至少升级到标准 1x 测功机类型才能做到这一点(即,如果您正在使用,您只能运行 1 个 Web 测功机实例免费或爱好测功机类型)。

    但是,除了您的 Web 进程之外,您还可以实例化多种其他进程类型(例如“工作”进程)。这些将无法侦听来自您的客户端的 HTTP/S 请求,但可用于从您的 Web 进程中卸载长时间运行的作业。

    因此,如果您将 4-6 个微服务中的每一个都映射到 Procfile 中的不同进程类型,并且如果您的微服务本身不是 Web 服务器,那么您也许可以使用 hobby dynos。

    【讨论】:

    • 好的。明白你的意思了。有没有办法在一个测功机上部署多个微服务?例如作为 docker 容器组?
    • 您当然可以在单个测功机上运行多个进程,尽管不一定推荐这样做。
    • @YoniRabinovitch 那么这些“工作进程”(限制为 10 个)与 Gunicorn 工作进程/操作系统进程之间有什么区别?根据 Heroku 的说法,Hobby dyno 最多可以有 255 个进程,而 Performance 可以有超过 50K+
    【解决方案2】:

    Heroku 的默认模型是将进程类型映射到它自己的 dyno:https://devcenter.heroku.com/articles/procfile states

    “你的应用程序中的每个测功机都属于一个进程 类型,并将通过运行与 那个进程类型。”

    例如heroku ps:scale worker=1 表示 worker 的类型。

    其他人写过关于 how to use foreman 或 Honcho 在单个 dyno 中运行多个 python 进程的文章,这些进程在 post_compile 步骤中使用辅助 Procfile 和可能的其他 slug 设置。据推测,您可以根据您选择的语言及其构建包做类似的事情;官方buildpack API 没有列出此步骤:/。也就是说,鉴于 Heroku 的基础 Ubuntu stacks,您也许可以使用 web: script.sh 来进行任何进程的设置和执行。

    要在 Docker 容器中对多个进程进行分组,您可以查看 https://runnable.com/docker/rails/run-multiple-processes-in-a-container,它再次依赖于自定义 CMD [ "/start.sh" ]。请注意,这与 Docker 的单进程每个容器的理念相反,并且可能会给您带来更多麻烦,例如围绕将信号转发给子进程、设置所有微服务的丑陋 Dockerfile 等(如果您决定使用多个容器,Heroku 在using Docker Compose for local dev 上有一篇文章。)

    另外,别忘了你是bounded by the performance of your dyno 和process/thread limits。

    当然,通常不建议将给定测功机中的多个进程用于非玩具生产或长期开发维护。 ;)

    【讨论】:

      【解决方案3】:

      RUNIT buildpack 可以很容易地在单个测功机中组合多个进程 - 只要它们都符合您的测功机内存限制(爱好测功机为 512M)。

      每个 Heroku 应用程序仍然只有一个 HTTP 端点,这意味着您的微服务将需要通过队列、发布/订阅或某些 RPC 集线器(如 deepstream.io)进行通信。

      【讨论】:

        猜你喜欢
        • 2020-10-26
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 2020-02-14
        相关资源
        最近更新 更多