ruby-on-rails-3 – 宝石/服务,用于自动化Heroku的动力和工人

我想知道在生产环境中Heroku的自动化定位和工作人员是否有很好的解决方案(对于每个人而言,它们都是不同的解决方案,因为它们是非常不相关的)。你/公司使用什么?

我发现了很多选择,但是对于一个生产环境来说,它们似乎并不成熟。
有Heroscale,似乎引入了一些延迟,因为它不在本地运行,我也听到一些停机时间。有一些delay_jobs的修改,长期以来还没有被更新,并且当前的绑定器有一些问题。还有一些与reque相关的替代方案,这似乎不能很好地处理一些HTTP异常,导致应用程序崩溃,而其他似乎需要一个永远运行的工作人员来安排其他工作人员,也可能遭受一些HTTP异常问题。

好。到底。现在使用的是在Rails3的生产环境中自动缩放Heroku的动力和工人?

提前致谢。

我们刚刚遇到这样的一件事,我花了相当多的时间在这件事上,让我感到很沮丧。我会试着坚持要点。有几个Heroku自动缩放解决方案似乎乍看起来体面。

已经给出了heroku-autoscaler的例子实际上是用于自动调整动力,而且几乎是声称要做到这一点的唯一解决方案(这当然不是很好)。大多数其他人只会声称为您自动调整工作人员。所以,让我们把重点放在第一位。你对工作人员的自动分析器取决于你实际使用的背景工作人员。这些是人们使用的最常见的后台处理库,所以自动分页器将尝试钩住其中的一个。您可以使用以下内容:

> workless
> hirefire
> heroku-resque-auto-scale
>等

其中一些在雪松堆上工作,有些可能需要一点调整。所有这些人的问题在于它就像试图用你自己的头发把自己从沼泽中拉出来。让我们以折射为例(它可能是最好的一个)。它修改delayed_job,以便工人自己可以查看排队队伍,如果有必要,可以增加更多的工作人员,如果队列中没有更多的工作,员工就会相互关闭。有几个问题:

>如果你想把工作放在今后执行的队伍,而不是现在,你就不幸了。当工作进入队列时,工作人员启动,但由于将来要执行这项工作,工作人员将关闭,除非另外一个工作进入队列,否则工作人员将无法启动(这是提醒工人启动的唯一方法)
>您放弃重试失败作业的能力,这可以在delayed_job中默认使用,但是如果失败的作业多次失败,则会重试一次失败的作业(并且逐渐更长时间),但是工作人员将在这个时间延迟,没有什么可以提示他们再次启动(实质上这是与第一种情况相同的问题)

解决这个问题的方法是让一个工作人员持续运行,因此可以定期监视队列,并可以在必要时执行任务,甚至可以启动更多的工作人员。但是,如果你这样做,你不会有任何钱(你有一个工作人员连续不断地全天候运行,不得不付出代价),这就是自动刻度机在heroku上的全部前提。实质上,如果您只是偶尔进行后台处理,或者您有后台作业可能会失败但重试成功,或者您有后台作业不需要立即执行,则没有可以自动缩放的库使用它将为您工作。

这里有一个选择。撰写Hirefire的人后来将其转移到了webapp(Hirefire app)中,其本质就是外部监控您的Heroku工人/力量,并根据需要旋转/关闭工人动力。这是免费的测试版,但它现在花费钱,少于你每天24小时运行一个工作人员,但如果你只需要几个后台工作一段时间,但仍然不重要。无论哪种方式,这是唯一可行的方式来确保您的后台工作基础设施完成您所需要的(以及滚动自己的解决方案,这意味着有一台机器,如EC2实例,您可以放置​​一些脚本,将ping你的英雄应用程序和旋转根据需要上班/关闭工人 – 一个非常小的努力)。

现在,Hirefire应用程序也提供自动调整您的dynos为您,这是基于挂钩您的英雄请求队列的延迟。不过,我发现这样做不好,或许如果你靠近你的英雄应用程序实际生活的亚马逊数据中心(我们没有),你可能会有不同的体验。但是,对于我们来说,无论如何我调整了设置,我们不必要地卷起了一大堆动力,永远不会旋转下来。你可以把它归结为一个事实,它是一个beta,它可能会改善自那以后,但这是我的经验。

长篇小说,如果你想自动调整你的工作人员,使用Hirefire应用程序,你会节省比你想象的少得多的钱,但它仍然是最便宜的选择。如果你想自动调整动力,你基本上没有运气。这只是让您拥有诸如Heroku这样的平台的便利的一个限制。

http://stackoverflow.com/questions/6598423/gems-services-for-autoscaling-herokus-dynos-and-workers

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails-3 – 宝石/服务,用于自动化Heroku的动力和工人