【问题标题】:Resque - distributing job load evenly between several serversResque - 在多台服务器之间平均分配工作负载
【发布时间】:2012-10-29 01:15:50
【问题描述】:

我有一个带有 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 执行相同的操作?

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

【问题讨论】:

    标签: ruby-on-rails redis resque


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      cant 用一个像这样的单一 rake 任务来实现这个(我猜)

      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

      在 ON SERVER-2 中重复相同的操作

      希望有帮助

      【讨论】:

        猜你喜欢
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多