Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails中管理后台服务器池_Ruby On Rails_Delayed Job_Resque_Sidekiq - Fatal编程技术网

Ruby on rails 如何在Rails中管理后台服务器池

Ruby on rails 如何在Rails中管理后台服务器池,ruby-on-rails,delayed-job,resque,sidekiq,Ruby On Rails,Delayed Job,Resque,Sidekiq,我们的Rails应用程序有一些非常密集的后台进程,有时需要几个小时才能运行。我们正在使用DelayEdJooWord,并考虑迁移到RESKE或SITKIQ的免费版本,在这个问题的上下文中是有意义的。 对于某些任务,我们在所有处理器上都达到了100%的cpu,目前后台处理器与Nginx、Rails和Postgres位于同一物理服务器上。我们还预计负荷会上升 我们希望将后台处理转移到一个商品级批处理虚拟机池中,最好根据需要对其进行旋转。我的想法是将perform代码提取到mini应用程序中,并将它们

我们的Rails应用程序有一些非常密集的后台进程,有时需要几个小时才能运行。我们正在使用DelayEdJooWord,并考虑迁移到RESKE或SITKIQ的免费版本,在这个问题的上下文中是有意义的。

对于某些任务,我们在所有处理器上都达到了100%的cpu,目前后台处理器与Nginx、Rails和Postgres位于同一物理服务器上。我们还预计负荷会上升

我们希望将后台处理转移到一个商品级批处理虚拟机池中,最好根据需要对其进行旋转。我的想法是将perform代码提取到mini应用程序中,并将它们放在批处理vm上

我不确定的是如何对其进行编码,以及如何在不同虚拟机之间对作业队列进行负载平衡。这是延迟的job/Reqsue/Sidekiq可以做的事情,还是我需要编写代码

编辑

我在这个主题上找到了一些有用的链接


我个人偏好Sidekiq。我会有点担心“几个小时”的工作,如果他们在中间失败了,会发生什么。默认情况下,Sidekiq将尝试重新运行它们。你可以改变这一点,但你肯定要仔细考虑这个场景。这当然适用于您使用的任何后台作业处理系统。我想我会想办法把那些大工作分解成小工作。即使只是“作业第1部分运行,然后将作业第2部分排队,等等”

至于可伸缩性,Sidekiq唯一真正的限制是Redis。请参见此处,以了解有关该选项的一些选项:


至于负载平衡,Sidekiq默认会这样做。我现在运行两个sidekiq服务器,它们从一个Redis实例中提取数据。每辆车上有25名工人,大约排12队。工作非常出色。

我见过Sidekiq的工作人员在网络运行期间挂断,最终停止所有作业的运行,直到用户抱怨,才知道

与Sidekiq相比,ConeyIsland提供了对作业执行的更多控制,并且还使用RabbitMQ作为消息总线,该总线更健壮,并且具有比Redis优越得多的扩展特性

您可以设置每队列和每作业超时,配置重试行为,错误作业永远不会导致工作线程挂起:它将始终继续处理其他作业

作业中的异常会推送到您选择的通知服务,这样您就可以知道作业何时出错


看看这个,它提供了管理集群的简单方法,并且内置了插件,可以与上帝一起管理resque集群(),谢谢你的回答。这是否意味着您在所有三台服务器上都安装了Rails应用程序?是的。我想如果你把事情分门别类的话,你就不必这么做了,但我有。有没有关于如何做的指南?我的意思是,如果我们有一个中央数据库,在多个盒子上有Rails服务器的副本,他们是如何相互了解的?我不确定我是否理解。他们不需要了解彼此的应用服务器。它们都与中央数据库通信。对不起,我的意思是是否有一个master Sidekiq实例控制其他实例?如果我们提出一个新的,如何注册?