分布式优先级队列,一次且仅一次

时间:2015-08-04 16:32:56

标签: concurrency queue

TL; DR

我有生产者,任务和消费者。我需要一个可扩展的排队系统,它可以确保一次只能使用一次任务,并且可以根据优先级对任务进行排序。

上下文:

我们有一个原型工作,但它不是“规模就绪”,今天我们需要扩展......

以下是原型“过程”:

1°)有些客户在数据库中上传数据集(PostgreSQL)

2°)每秒,应用程序在数据库中获取新数据集并将其转换为任务。 一个客户的数据集可以生成数千个任务(约500K任务/天,~30K任务/客户)

3°)应用程序“Dispatcher”

  • 从数据库中获取已排序的任务(具有最小数据集的任务将首先进行,即使它们之后已提交+一些随机值进行随机播放)
  • 执行一些验证(检查任务是否已取消)
  • 将任务分派给相应的工作人员。 每个工作人员只能处理一种任务,但它可以同时处理数千个任务。

4°)工作人员接收任务,并将结果推送到数据库

5°)“Monitor”应用程序检查所有任务的状态,并重试任何需要(工作人员崩溃)的任务。

今天,瓶颈是SQL服务器,我可以调整它,但我更愿意以正确的方式重新设计它。那么,我想知道这种过程是否有一些最佳实践?

我似乎需要一个分布式排队系统(Kafka?),它可以保证任务只处理一次,但也会管理优先级。

0 个答案:

没有答案