使用作业队列分配工作负载

时间:2012-04-11 13:51:38

标签: load message-queue zeromq

我有一个创建大量作业的应用程序,我希望能够在多个服务器上处理这些作业以分配负载

每个作业都有一个类别,并且一个类别中的所有作业都按特殊顺序排列,因此如果作业j1与类别A相关,则在作业j2之前也与类别A相关,则j1必须在j2之前处理,但是作业与B类相关的j3可以在两者之间进行处理。

我有两个如何实现这个的想法:

  1. 使用所有作业创建一个队列,并让多个工作人员从此队列中拉出。当工人提取与A类相关的工作时,它必须锁定与A类相关的工作,因此没有其他人开始处理这些工作。然后它会在完成时释放锁定。

  2. 为每个类别建立一个队列,然后告诉工作人员从哪个队列中提取。如果只有一个工作人员负责类别队列,则不必锁定它。一名工人可能负责许多队列。

  3. 我喜欢有一个队列的想法,而不必为每个工作者指定一个特殊队列,但我不喜欢为每个类别实现某种信号量的想法。

    到目前为止,我已经使用Redis排队取得了巨大成功,但我已经开始研究zeromq,它有更多可能对我有用的模式。

    这样做的最佳方法是什么?你能推荐哪些工具/库?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Gearman

  

Gearman提供了一个通用的应用程序框架来将工作分配到   其他更适合工作的机器或工艺。它   允许您并行工作,负载均衡处理,以及   语言之间的呼叫功能。它可以用于各种各样的   应用程序,从高可用性网站到运输   数据库复制事件。

它允许您在服务器之间分配工作负载(并且,从案例研究中读取,看起来很擅长),它还允许您将任务的优先级设置为高/低/正常,您可以使用(如果我理解你的情况,以确保按照应该的顺序处理作业。