1

我有一个带有 Resque 的 Rails 应用程序,在多台服务器上执行后台作业。这些作业在资源需求方面有所不同,因此我想限制每个服务器可以执行的特定类型的作业数量。我希望能够让多台服务器查询同一个 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 执行相同的操作?

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

4

2 回答 2

0

这不是你可以或不应该在 redis 级别做的事情。您需要一个主管,负责处理对您的 redis 实例的应用程序请求。很长时间以来,我都没有为 ruby​​ 写过任何产品级别的东西,所以我不能推荐一个最喜欢的候选人,但我相信 ruby​​ 社区中会有一些东西可以完全满足你的需要。

于 2012-10-19T06:22:13.777 回答
0

cant可以通过像这样的单个 rake 任务来实现这一点(我猜)

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

但是,如果您可以分叉您的 rake 任务,那么您可以

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

希望这有帮助

于 2012-10-28T17:15:50.173 回答