gpt4 book ai didi

heroku - 缩小特定的 Heroku worker dynos?

转载 作者:行者123 更新时间:2023-12-04 01:10:25 25 4
gpt4 key购买 nike

我正在构建一个 Web 应用程序,该应用程序为用户提供上传大图像并对其进行处理的能力作为核心功能。处理大约需要 3 分钟才能完成,我认为 Heroku 将是一个理想的平台,能够以高度可扩展的方式按需运行这些处理作业。处理任务本身在计算上相当昂贵,并且需要运行高端 PX dyno。我想最大化并行化,并最小化(有效消除)作业在队列中等待的时间。换句话说,我想为 N 个作业配备 N 个 PX dynos。

值得庆幸的是,我可以使用 Heroku 的 API(或可选的 Hirefire 之类的服务)轻松完成此操作。每当有新的处理请求进来时,我可以简单地增加工作人员计数,新工作人员将从队列中获取作业并立即开始处理。

然而,虽然放大是无痛的,但缩小是麻烦的开始。 Heroku API 受到了令人沮丧的限制。我只能设置正在运行的 worker 的数量,而不是专门杀死空闲的 worker 。这意味着,如果我有 20 个 worker ,每个 worker 处理一张图像,并且一个人完成了它的任务,我不能安全地将 worker 数量扩展到 19,因为 Heroku 会杀死一个任意的 worker dyno,不管它是否真的在工作中!让所有 worker 一直运行直到所有工作完成是不可能的,因为成本将是天文数字。想象一下,在高峰期间创建的 100 名 worker 继续无限期地闲置,因为一整天都有一些新工作不断涌入!

我在网上搜索过,人们建议的最佳“解决方案”是让您的工作进程优雅地处理终止。好吧,如果您的工作人员只是在发送大量电子邮件,那完全没问题,但我的工作人员正在对图像进行一些非常耗时的分析,正如我上面提到的,大约需要 3 分钟才能完成。

在理想的世界里,我可以杀死一个 具体 worker dyno 在完成其任务后。这将使缩小规模与扩大规模一样容易。

事实上,我通过从 worker dynos 切换到一次性 dynos(它在进程终止时终止,即在“根程序”退出后停止为 dyno 付费)接近了那个理想的世界。但是,Heroku 设置了 5 个可以同时运行的一次性 dyno 的硬限制。我可以理解这一点,因为从某种意义上说,我确实在滥用一次性 dynos……但这仍然令人沮丧。

有什么办法可以更好地缩减我的 worker 数量?我不想从根本上重新设计我的处理算法......将它分成几个块,在 30-40 秒内运行,而不是一个 3 分钟的时间(这样意外杀死正在运行的 worker 就不会灾难性的)。这种方法会极大地复杂化我的处理代码并引入几个新的故障点。但是,如果这是我唯一的选择,我将不得不这样做。

任何想法或想法表示赞赏!

最佳答案

这是 Heroku 的支持人员对此的回答:

I'm afraid this isn't possible at the moment. When scaling down your workers, we will stop the one with the highest number, so we don't have to change the public name for those dynos, and you don't get numbering holes.



我找到了 this comment在这种情况下很有趣,尽管它并没有真正解决这个问题。

关于heroku - 缩小特定的 Heroku worker dynos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com