问题标签 [hirefire]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
heroku - 缩小特定的 Heroku 工人测功机?
我正在构建一个 Web 应用程序,它为用户提供上传大图像并对其进行处理的核心功能。完成处理大约需要 3 分钟,我认为 Heroku 将是一个理想的平台,能够按需运行这些处理作业,并且以高度可扩展的方式。处理任务本身的计算成本相当高,并且需要运行高端 PX 测功机。我想最大化并行化,并最小化(有效地消除)作业在队列中等待的时间。换句话说,我想为 N 个工作提供 N PX 测功机。
值得庆幸的是,我可以使用 Heroku 的 API(或可选的像 Hirefire 之类的服务)轻松完成此任务。每当有新的处理请求进来时,我可以简单地增加工作人员数量,新工作人员将从队列中获取作业并立即开始处理。
然而,虽然扩大规模是无痛的,但缩小规模是麻烦的开始。Heroku API 令人沮丧地受到限制。我只能设置正在运行的工人数量,不能专门杀死空闲的工人。这意味着,如果我有 20 个工作人员,每个工作人员处理一个图像,并且一个人完成了它的任务,我不能安全地将工作人员数量扩展到 19,因为 Heroku 会杀死一个任意工作人员测功机,无论它是否真的在工作中!让所有工人运行直到所有工作完成是不可能的,因为成本将是天文数字。想象一下,在高峰期创建的 100 名工人继续无限期地闲置,因为全天都有一些新工作在滴滴答答!
我已经搜索了网络,人们建议的最佳“解决方案”是让您的工作进程优雅地处理终止。好吧,如果您的工作人员只是在发送大量电子邮件,那很好,但我的工作人员正在对图像进行一些非常冗长的分析,正如我上面提到的,大约需要 3 分钟才能完成。
在一个理想的世界里,我可以在完成任务后杀死一个特定的工人测功机。这将使缩小规模与扩大规模一样容易。
事实上,通过从工人测功机切换到一次性测功机(它在进程终止时终止,即在它的“根程序”退出后您停止为测功机付费),我已经接近了那个理想的世界。但是,Heroku 设置了可以同时运行 5 个一次性 dyno 的硬性限制。我可以理解这一点,因为我肯定在某种意义上滥用了一次性测功机……但这仍然令人沮丧。
有什么办法可以更好地缩减我的员工人数?我宁愿不必从根本上重新设计我的处理算法......将它分成几块在 30-40 秒内运行而不是 3 分钟的时间(这样就不会意外杀死正在运行的工人灾难性的)。这种方法会极大地复杂化我的处理代码并引入几个新的故障点。但是,如果这是我唯一的选择,我将不得不这样做。
任何想法或想法表示赞赏!
ruby - 从 routes.rb Ruby 转换为 urls.py Django
我需要使用静态 url 修改文件 urls.py。下一行是在 routes.rb 中用 Ruby Lang 编码的
我不知道如何在 urls.py Django 中编写同一行代码。拜托我需要你的帮忙。
heroku - 是否可以扩展特定的 Heroku Worker?
我目前正在尝试开发一个严重依赖 heroku 工作人员(执行 NodeJS 脚本,在此处无法切换到 Ruby/Rails)处理长时间运行(1 - 168 小时)后台作业的应用程序。我的问题是某些工作可能会在 1 小时内完成,而其他工作可能需要 168 小时,而且我不想等到我所有的工人都完成后才开始缩减规模,因为 Heroku 会按每个工人的那段时间向我收费.
我对每天重新启动一次 dynos 没有任何问题,但我想知道是否有可能(以及如何)通过 Heroku API 或任何其他方式(可能从工作进程中)缩小特定的 Heroku 工作人员本身,尽管从内部终止进程似乎只会导致工人重新启动自己,而不是缩小自己)。
如果这是不可能的,那么我想知道是否有人知道如何捕获“缩小事件”(即是否有一些信号发送到要缩小的随机工作人员,如 SIGTERM 或 SIGKILL?)。
任何建议都值得赞赏。
heroku - 使用 CLI 读取 Heroku dyno 格式
我们使用 HireFire 来管理多个 DelayedJob 队列,队列与Procfile
可能因应用程序而异的不同条目相关联。
在一天中 95% 的时间里,编队中的某些测功机类型被缩放为 0。(基本上,夜间批处理作业开始,提交到一个队列或其他队列,Performance-M 或 L 测功机被缩放为 1、2 或 3来处理这些作业,然后当队列为空时它们会缩小到零)。
CLIps
命令将检索有关正在运行的进程的信息,但如果一种或多种测功类型被缩放为零,它们不会出现。
有谁知道即使测功机没有运行也可以检索测功机形成信息的方法?