标签: hirefire

缩小特定的Heroku工作人员dynos?

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

值得庆幸的是,我可以使用Heroku的API(或者像Hirefire这样的服务)轻松完成这项工作.每当有新的处理请求进入时,我都可以简单地增加工作者数量,新工作人员将从队列中获取作业并立即开始处理.

然而,虽然扩展是无痛的,但缩小是麻烦开始的地方.Heroku API令人沮丧地受到限制.我只能设置正在运行的工作人员数量,而不是专门杀死闲置工作人员.这意味着,如果每个处理一个图像的工人有20个,一个完成任务,我就无法安全地将工人数量扩大到19,因为Heroku会杀死一个任意的工人dyno,无论它是否真的在工作中!让所有工人继续工作直到所有工作完成都是不可能的,因为成本是天文数字.想象一下,在一个尖峰期间创造的100名工人继续无限期地闲置,因为一天中有一些新工作涓涓细流!

我在网上搜索过,人们建议的最佳"解决方案"就是让你的工作流程优雅地处理终止.如果您的工作人员正在进行群发电子邮件,那就完全没问题,但我的工作人员正在对图像进行一些非常精细的分析,正如我上面提到的,大约需要3分钟才能完成.

在一个理想的世界里,我可以在完成任务后杀死一个特定的工人dyno.这将使缩小与缩放一样简单.

事实上,我已经接近理想的世界,从工作人员dynos切换到一次性dynos(终止于进程终止,即你在"root程序"退出后停止支付dyno).然而,Heroku设置了5个可以同时运行的一次性dynos的硬限制.我可以理解,因为我当然在某种意义上滥用一次性dynos ......但是它仍然令人非常沮丧.

有什么方法可以让我的工人更好地缩小规模吗?我宁愿不必从根本上重新设计我的处理算法......将它分成几个块,这些块在30-40秒内运行,而不是一个3分钟的延伸(这意味着意外杀死正在运行的工作人员不会灾难性的).这种方法会使我的处理代码大大复杂化并引入几个新的失败点.但是,如果这是我唯一的选择,我将不得不这样做.

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

scaling heroku hirefire

12
推荐指数
1
解决办法
1319
查看次数

Delayed_job与Appoxy SimpleWorker

当我在Heroku上找到Appoxy SimpleWorker时,我正准备开始使用delayed_job并在我的应用程序上运行.

Appoxy表示它大规模并行,并且可以上下调整工作人员以最大限度地降低成本.但是,在我看来,使用HireFire,delayed_job也是如此.这是我的问题:你会选择哪个:delayed_job + HireFire或SimpleWorker?(为什么?)

https://github.com/tobi/delayed_job
http://hirefireapp.com/
http://addons.heroku.com/simple_worker

我的应用程序目前很小 - 音量很低,应用程序的数量不应该非常高.


还有什么人可以期望直接从这两项服务的创始人那里得到回复?谢谢Michael和Travis!

ruby-on-rails heroku delayed-job ruby-on-rails-3 hirefire

6
推荐指数
1
解决办法
783
查看次数

我怎么知道我在Heroku上使用了多少工人dynos?

我正在使用HireFireApp在Heroku上自动调整我的网络和工作人员dynos.但是,当我导航到我的应用程序上的Resque应用程序时,它说

"46名工人中的0人"

这是否意味着我正在使用46个工作人员dynos ???

更新:

运行heroku ps显示:

web.1     up for 21m       bundle exec thin start -p $PORT       
worker.1  starting for 1s  bundle exec rake resque:work QUEUE..
Run Code Online (Sandbox Code Playgroud)

heroku worker hirefire

3
推荐指数
1
解决办法
784
查看次数

如何在开发中的rails 3中使用hirefire for delayed_job?

我正在使用delayed_jobs开发一个带有rails 3的应用程序.我正在使用Hirefire在需要时扩展和缩小工作人员.如何在我的开发环境中使用雇佣工作,以测试它是否按预期工作.

那我该如何配置呢,这样它也可以在Heroku Cedar堆栈的生产环境中工作.

delayed-job ruby-on-rails-3 hirefire

2
推荐指数
1
解决办法
370
查看次数