Resque - 在多个服务器之间均匀分配作业负载

时间:2012-10-17 23:10:58

标签: ruby-on-rails redis resque

我有一个Rails应用程序,Resque在多个服务器上执行后台作业。作业在资源需求方面有所不同,所以我想限制每个服务器可以做的特定类型的作业数量。我希望能够让多个服务器查询同一个Redis数据库。

以下是该方案: 我将Server-1和Server-2连接到同一个Redis数据库。

1)每台服务器最多需要3个“编码”作业和5个“解析”作业(共8个作业)。

2)在给定时刻,Redis-server将在“编码”队列中拥有10个作业,并且“解析”队列中的12个作业可供Resque工作人员处理。我有2台服务器在运行,查询同一个数据库。

问题:如何阻止Server-1执行8个“编码”作业,Server-2采取其余工作?换句话说,如何限制Server-1从“编码”队列中仅获取3个作业,从“解析”队列中获取5个作业并让S​​erver-2执行相同操作?

我希望将代码保持通用,以便我可以将其部署到多个服务器而无需单独调整..

2 个答案:

答案 0 :(得分:0)

这不是你可以或应该在redis级别做的事情。您需要一个位于应用程序请求到redis实例之间的主管。我已经很长时间没有在ruby的生产级别上写任何东西,所以我不能建议一个最喜欢的候选人,但我相信红宝石社区中会有一些东西可以满足您的需求。

答案 1 :(得分:0)

cant通过一个像这样的rake任务实现这个(我猜)

rake resque:workers COUNT = 8 QUEUE = encoding_queue,parsing_queue BACKGROUND = yes

但是,如果你可以分叉你的佣金任务,那么你可以

ON SERVER-1

rake resque:workers COUNT=3 QUEUE=encoding_queue BACKGROUND=yes

rake resque:workers COUNT=5 QUEUE=parsing_queue BACKGROUND=yes

在ON SERVER-2

中重复相同的操作

希望这个帮助