2012-10-17 38 views
1

我有一个Rails应用程序,使用Resque在多个服务器上执行后台作业。这些工作的资源需求是不同的,所以我想限制特定类型的工作量,每个服务器都可以。我希望能够让多个服务器查询相同的Redis数据库。Resque - 在多个服务器之间均匀分配作业负载

这里是场景: 我有服务器1和服务器2连接到相同的Redis数据库。

1)每个服务器应该采取3个“编码”作业和5个“分析”作业最多(总共8个作业)。

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

问题:如何防止Server-1采用8个“Encoding”作业,Server-2采取其余的措施?换句话说,如何限制Server-1从“编码”队列中只取3个作业,从“解析”队列中取5个作业并使Server-2执行相同的操作?

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

回答

0

这是不是你可以或应该在Redis的水平做。您需要一位位于应用程序请求之间的超级用户实例的主管。我很久没有在Ruby的生产级写任何东西,所以我不能推荐一个最喜欢的候选人,但我相信在Ruby社区会有一些东西可以满足你的需求。

+0

你能指出这类上司的一些例子希望一样吗? – Stpn

0

cant与这样

耙resque一个rake任务做到这一点(我猜):工人COUNT = 8 QUEUE = encoding_queue,parsing_queue背景= 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

此帮助