0

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

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

关于如何实现这一点,我有两个想法:

  1. 将所有作业组成一个队列,并让多个工作人员从该队列中拉出。当一个工人拉出与 A 类相关的工作时,它必须锁定与 A 类相关的工作,这样其他人就不会开始处理这些工作了。然后它会在完成后释放锁。

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

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

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

这样做的最佳方法是什么,您可以推荐哪些工具/库?

4

1 回答 1

0

您可以尝试使用Gearman

Gearman 提供了一个通用的应用程序框架,将工作外包给其他更适合完成工作的机器或进程。它允许您并行工作、负载平衡处理以及在语言之间调用函数。它可用于各种应用程序,从高可用性网站到数据库复制事件的传输。

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

于 2012-04-16T14:03:55.840 回答