我有以下(我猜是常见的)场景:一个主节点保存要处理的项目列表(url、作业等),以及一组 N 个工作节点。
每个工作线程从队列中弹出一个项目,执行某些操作,然后通知主节点作业已成功完成。
工作人员可以将新项目推送到主节点,以便这些项目排队等待处理。
要求非常简单:
- 没有作业会执行两次
- 没有作业被两个节点选择(即“pop”是原子的)
- 如果作业失败,在固定超时后,该作业将再次可供处理
- 并发工作人员数量可能很大
- 多个工作线程可能位于一个节点上
- 假设 master 和worker 不在同一个网络中
- 弹出和推送必须作为 REST API 公开(即队列与语言无关)
- 项目必须持久存储在主节点上(即没有内存解决方案)
我无法找到简单和轻量级的REST实现:我已经查看了RabbitMQ , Celery , Google App Engine以及其他一些不太成熟的项目,但所有这些项目似乎管理起来都相当复杂,对于我所需要的东西来说有点大材小用。
有什么我可能会忽略的解决方案吗?
最佳答案
Amazon SQS 可能正是您想要的:http://aws.amazon.com/sqs/
一月
关于http - 分布式 REST 队列的可用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612558/