我有一个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执行相同的操作?
我想保持代码的通用性,这样我就可以将它部署到多个服务器上,而不需要单独调整。
发布于 2012-10-19 14:22:14
这不是你可以或应该在redis级别上做的事情。您需要一个主管,它位于应用程序对redis实例的请求之间。我已经很长一段时间没有为ruby编写任何产品级别的东西了,所以我不能推荐一个最喜欢的候选人,但我相信ruby社区中会有一些东西可以做你需要的事情。
发布于 2012-10-29 01:15:50
你可以通过一个像这样的cant任务(我猜)实现这一点。
rake resque:workers COUNT=8 QUEUE=encoding_queue,parsing_queue BACKGROUND=yes
但是如果你能把你的rake任务分成两部分,那么你就可以
在SERVER-1上
rake resque:workers COUNT=3 QUEUE=encoding_queue BACKGROUND=yes
rake resque:workers COUNT=5 QUEUE=parsing_queue BACKGROUND=yes
在SERVER-2上重复相同的步骤
希望这对你有所帮助
https://stackoverflow.com/questions/12944795
复制相似问题