我有以下场景(常见的,我猜是这样的):一个主节点包含一个要处理的项列表(url、作业,等等),以及一组n个工作节点。
每个工作进程从队列中弹出一个项目,执行一些操作,然后通知主节点作业已成功完成。
工作进程可以将新项目推送到主节点,以便这些项目排队等待处理。
要求很简单:
没有作业被执行两次
没有作业被两个节点选择(即“pop”是原子的)
如果作业失败,在固定超时后,该作业将再次可用于处理
同时工作的工人数量可能很大
几个工人可能住在一个节点上
主人和工人不在同一个网络中
pop和push必须作为rest api公开(即队列与语言无关)
项目必须永久存储在主节点上(即没有内存解决方案)
我找不到简单而轻量级的rest实现:我查看了RabbitMQ、Celery、Google App Engine和其他一些不太成熟的项目,但所有这些项目似乎都很难管理,而且有点像是对我所需要的东西的过度开发。
有什么我可能忽略的解决方案吗?
最佳答案
我也做过同样的调查。我发现芹菜离我很近(还看了其他像章鱼一样的东西)——没有一个看起来像我想要的那么简单,而且少了一些东西。我发现芹菜很简单,但是引入了一个合理数量的依赖项,我还没有在混合中,所以我去了一些定制(基于erlang)