好的.. 在heroku上,我有24个工作进程(据我所知)。 我有1000个客户,每个客户在postgresql数据库中都有自己的“模式”。
每个客户都有可以“延迟”完成的任务.. 将订单发送到我们公司的后端就是一个很好的例子。
我曾经想过为每个客户创建一个新的队列,并且每个队列都有自己的工作进程。但似乎这不可行。
所以好吧.. 我现在的想法是在客户记录中添加一个队列字段.. 例如,客户1到15在队列_a中, 客户16到106在队列_b中..等等。如果一个客户使用了大量资源,我们可以将他们移动到新的队列中,或将其他人移出慢队列。低容量的客户可以被收集起来.. 这将是一个平衡的过程,但如果我们跟踪指标(我们无论如何都会这样做),管理起来并不难。
(任何反对意见都非常欢迎,我现在还处于构思阶段)
但现在,我想弄清楚如何为每个队列创建一个工作进程。 https://gist.github.com/486161 告诉我如何创建X个工作进程,但并没有让我将一个工作进程设置为一个队列。如果我知道了这一点,以及如何获取队列列表,我认为我就可以朝着解决限制的可行方案迈进了。
继续阅读
http://blog.winfieldpeterson.com/2012/02/17/resque-queue-priority/
我意识到我的计划充满了困难.. 第一个添加到工作进程的客户/队列会得到优先处理.. 我不想要那样,我希望他们都有相同的优先级。只要他们属于同一个队列..
Redis.queues
(https://github.com/resque/resque/blob/8a8fd83f1f32755734f0068d9f211aeb2fda1f9e/lib/resque.rb#L253)在Redis上使用了[SMEMBERS](http://redis.io/commands/SMEMBERS)操作。因为Redis是一个专为速度而设计的键值缓存/存储,所以SMEMBERS不会尝试对集合成员进行排序。因此,@baash05的问题的答案是否定的。 - sameers