我有一个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个作业并让Server-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
希望这个帮助