一种支持作业批处理的排队系统(例如,一次为一名工人提供多个作业)


A queuing system which supports job batching (e.g. several jobs for 1 worker at once)

我正在寻找一个可以支持以下场景的排队系统:

  • 一个客户端添加一个作业——检查某个特定url(URL1)有多少Facebook点赞
  • 客户端添加另一个作业-检查URL2的相同信息
  • [….]

  • 工作人员从队列中选择1到50个作业(URL)(例如,如果只有5个作业,则选择5个作业;如果有60个作业,那么选择50个作业,将其他作业留给另一个工作人员),并针对Facebook API发出请求(每个请求允许多个URL)。如果成功,所有作业都将从队列中删除;如果失败,所有作业将保留。

我使用的是PHP,我研究过Gearman、Beanstalkd,但没有发现任何类似的功能。有没有(免费)排队系统可以支持这种"批量排队"?

或者,也许有人可以提出另一种处理这种问题的方法?我曾考虑在排队系统之外保留一个"待检查"url的列表,然后用每X个周期运行一次的cron作业将它们添加到最多N个项目的捆绑包中。但这有点像建立自己的队列,违背了整个目的,不是吗?

我使用Beanstalkd一次获取100个twitter名称,然后用它们全部调用API。当我完成后,我删除了它们——但如果我愿意的话,我本可以选择不删除部分(或全部)。

这是一个简单的循环来保留最初的100(一次一个),然后我将结果(作业ID和返回的数据)放入一个数组中。当我处理完负载(在本例中是twitter屏幕名称)后,我删除了它们,但我本可以很容易地将它们放回队列中。

也许您可以从MediaWiki的作业队列系统中获得灵感。虽然不是很复杂,但如果你决定推出自己的产品,你可能会遇到一些问题。

此处定义了用于此操作的DB表。