解决方案/架构:队列或其他什么?

时间:2012-04-16 17:14:57

标签: ruby node.js architecture distributed-computing solution

我有一个用Node.js编写的服务的多个前端和用Ruby编写的工作者。现在的问题是如何进行沟通?我需要维护动态工作池以处理负载(在负载上升时产生更多工作人员)并且消息非常大~2-3M因为我正在向用户通过Node.js前端上传的工作人员发送图像。因为我想要很好的扩展我想到了一些排队解决方案,但我没有找到任何现有的解决方案(或误解的指南)将提供:

  1. 后备机制。到目前为止我发现的解决方案有单个故障点 - 消息代理,并且没有办法提供回退。
  2. 序列化。因此,当经纪人失败时,任务不会丢失。
  3. 传递重要信息的能力。
  4. Ruby和Node.js的简易API
  5. 一些用于跟踪队列大小的API,因此我可以重新安排工作池。
  6. 优选轻量级。
  7. 也许我的做法错了?也许我不应该使用队列,但其他方式?还是有一些符合上述要求的排队解决方案?

3 个答案:

答案 0 :(得分:1)

毫无疑问,你需要一个队列来扩展,你可以监视这个队列以产生“工人”。

Apache ActiveMQ非常强大,支持REST协议。 Ruby客户端也可以访问队列。

关于RESTful queue using Apache ActiveMQ的有趣文章

答案 1 :(得分:1)

在一天结束时,我采用了ZeroMQ队列解决方案。非常快速,强大和轻量级的实现。不得不写自己的经纪人,但这是这个解决方案的唯一缺点。

答案 2 :(得分:0)

redis发布/订阅应该可以解决问题

http://redis.io/topics/pubsub