【问题标题】:Scaling Dyno worker size dynamically on Heroku Rails application在 Heroku Rails 应用程序上动态缩放 Dyno worker 大小
【发布时间】:2016-08-02 15:49:55
【问题描述】:

我正在开发一个项目,该项目通过 Rails 工作者启动一个进程,该进程非常耗费资源,并且只能由 Heroku 上的 Performance Worker 正确处理,1X 工作者因使用过多 RAM 而被杀死,而 2X 工作者可以几乎无法处理超出其 RAM 限制的负载高达 160%。绩效工作者可以毫无问题地完成工作。

我的问题是,有没有办法在作业启动之前将 Dyno 大小动态切换为 Performance,然后在作业完成或队列为空后将其缩小?

我知道 HireFire 存在,但据我所知,这项服务只会根据队列长度等增加工作人员的数量?我想到的另一个可能的解决方案是使用 Heroku API,它有一个 Dyno 端点,在作业开始前调整工作人员 dyno 的大小,然后在作业结束时将其缩小。

还有其他人对此问题有其他建议、想法或策略吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby heroku heroku-api


    【解决方案1】:

    最好的方法是你提到的那个:在开始工作之前使用Heroku Platform API 放大你的 Dyno 尺寸,然后再缩小。

    这是因为像 HireFire 这样的工具只能通过检查应用程序响应时间、路由器队列等内容来工作——因此他们无法知道您将要运行某些工作,然后再为此进行扩展。

    【讨论】:

    • 谢谢,是的,我认为这将是唯一的解决方案之一。 Heroku 建议“通过平台 API 管理它是一种方法,但如果您想要替代方法,您可以考虑使用 heroku toolbelt buildpack,它可以让您访问测功机内的工具带。抱歉,我没有直接为您提供更简单的解决方案。”
    【解决方案2】:

    根据使用的具体情况,您可以只在您的 procfile 中创建一个独特的 dyno-type,它只运行这个特定的工作程序并且总是缩放到 performance,但并不总是运行?你甚至可以一次性运行它,而不是潜在地扩展它(这也可以通过 API 完成,大致相当于heroku run ...)。也就是说,@rdegges 的答案肯定会起作用。

    【讨论】:

    • 这是一个有趣的想法,我会研究一下。
    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2012-03-08
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多