我目前正在处理一个需要处理大量重复作业的项目。基本上,当一项工作完成后,我想在15分钟后再次开始工作。可扩展的动态作业队列处理
作业集随着时间的推移而动态变化,因此我需要监视新的和删除的作业。 每个工作都需要一些时间来处理,因此我需要能够扩展。我将有一个网站作为管理这些工作的前端。
我正在考虑使用MongoDB(与分片)来存储作业。 然后,我可以创建一个“作业代理”来经常查询数据库,以查看是否有任何作业已准备好并使用,例如, RabbitMQ开始对一组工作者开展工作。
有与设置虽然一些非常明显的问题:
- “作业代理”是一个非常频繁的基础上的瓶颈和单点故障
- 查询的MongoDB潜在的巨大收集似乎是一个不好的解
我不受这项技术的限制,但我根本不知道如何为此设计架构。有任何想法吗?
谢谢迈克尔。我有一个使用AMQP实现的原型,分布式锁定和包含作业的共享数据库。 每个工人都充当入场者和处理者。当工作人员获得分布式锁时,它会在数据库中找到准备处理的作业,在作业上设置处理标志,并通过AMQP发送消息。当工作人员完成一项工作的处理时,它会用新的时间戳修改数据库。 因此,我没有单点失败。 – kfuglsang