基本上我有一个主节点在工作节点之间分配任务。工作人员数量可能会发生变化,这意味着工作人员无法在服务器端进行硬编码。 Master将任务提交给队列,其中一个worker执行此任务,处理它并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间大约为100-300毫秒,这意味着消息传递系统不应该为处理时间增加显着的延迟。
目前我正在研究请求 - 响应JMS模式。这意味着master将任务提交给共享队列,worker将从队列中获取任务并将结果提交给由主节点监听的另一个队列。 Master会将响应与请求相关联。
我担心JMS可能会给系统带来延迟,这是不可接受的。可能我应该看看其他解决方案?如RabbitMQ,JGroups或ZooKeeper?
如果JMS适用于此,您能推荐最快的JMS代理吗?目前我在看ActiveMQ
该解决方案的另一个要求是它应该能够在云中工作
答案 0 :(得分:1)
基于JMS的解决方案无法保证低延迟,因为所有供应商都使用固有的消息批处理技术,无论是Rabbit还是Hornet,还是ActiveMQ都可以实现高吞吐量。 像IBM和Mule这样的供应商已经为这项工作发布了特定的低延迟产品。
但一切都取决于你的负荷和产生的任务数量以及消费的工人数量。因此,通过调整,您可以获得个性化的数字。
基于LMAX破坏者的CoralQueue绝对值得一看。
答案 1 :(得分:0)
你应该看看这里[1],Rabbitmq有一篇很好的性能文章和有关延迟的讨论。
快速回复,我不得不说Rabbitmq在某些压力情况下可以承受400ms的延迟值,但通常发送速率低,最接近40ms或更短。看看(尝试发送速率与延迟图形)
顺便说一下,您还应该考虑网络延迟。此基准测试显示本地主机性能。
[1] http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/
答案 2 :(得分:0)
我认为您正在寻找Java解决方案(来自JMS)
对于高吞吐量低,内存队列功能的延迟,您可以考虑Hazelcast(http://hazelcast.org/)
它可能会......这取决于工人离开/加入群集的频率。非常频繁地添加/删除群集成员会降低其效率。
此外,如果您需要持久队列或复杂的队列管理,这可能也很麻烦。
非Java客户端会出现问题,因为您需要购买许可证。
但是,如果您只想要一个适用于Java的低延迟队列 - 它就可以实现这一功能
如需快速查看是否符合您的目的,请点击此处: http://docs.hazelcast.org/docs/latest/manual/html/queue.html
确保您的网络配置也很好。 10gig如果可以,1gig会做,但要确保你使用信誉良好的开关。