Jms 低延迟消息队列

Jms 低延迟消息队列,jms,activemq,rabbitmq,apache-zookeeper,jgroups,Jms,Activemq,Rabbitmq,Apache Zookeeper,Jgroups,基本上,我有一个主节点,在工作节点之间分配任务。工人的数量可能会发生变化,这意味着工人不能在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接受该任务,对其进行处理并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为100-300毫秒,这意味着消息传递系统不应给处理时间增加显著延迟 目前,我正在研究请求-响应JMS模式。这意味着主节点将任务提交到共享队列,工作节点将从队列中获取任务,并将结果提交到主节点侦听的另一个队列。Master会将响应与请求关联起来 我担心

基本上,我有一个主节点,在工作节点之间分配任务。工人的数量可能会发生变化,这意味着工人不能在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接受该任务,对其进行处理并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为100-300毫秒,这意味着消息传递系统不应给处理时间增加显著延迟

目前,我正在研究请求-响应JMS模式。这意味着主节点将任务提交到共享队列,工作节点将从队列中获取任务,并将结果提交到主节点侦听的另一个队列。Master会将响应与请求关联起来

我担心JMS可能会给系统带来延迟,这是不可接受的。也许我应该看看其他的解决方案?比如RabbitMQ、JGroups或ZooKeeper

如果JMS适合这里,您能推荐最快的JMS代理吗?目前我正在关注ActiveMQ


解决方案的另一个要求是,它应该能够在云中工作

您应该看看这里[1],Rabbitmq有一篇关于性能的文章,其中谈到了延迟

一个简短的回复,我不得不说Rabbitmq在某些压力环境下可以接受400ms延迟值,但通常在低发送速率下,它最接近40ms或更少。查看(尝试发送速率与延迟图形)

顺便说一下,您还应该考虑您的网络延迟。此基准测试显示了本地主机的性能


[1]

我猜您正在寻找一个Java解决方案(来自JMS)

对于吞吐量低、内存队列功能延迟的情况,可以考虑Hazelcast()

也许可以。。。这取决于员工离开/加入集群的频率。频繁添加/删除集群成员会降低效率

此外,如果您需要持久化队列或复杂的队列管理,这也可能会带来麻烦

非java客户端将出现问题,因为您需要购买许可证

但是,如果您只想为java创建一个低延迟队列,它就可以做到这一点

要快速查看是否符合您的目的,请查看以下内容:


确保您也有一个良好的网络配置。10gig如果可以,1gig也可以,但请确保使用信誉良好的交换机。

基于JMS的解决方案无法保证低延迟,因为所有供应商(无论是Rabbit、Hornet还是ActiveMQ)都使用固有的消息批处理技术来实现高吞吐量。 IBM和Mule等供应商已经为这项工作发布了特定的低延迟产品

但一切都取决于你的工作量、产生的任务数量和消耗的工人数量。因此,通过调谐,您可以获得您的个性化号码


基于LMAX disruptor的CoralQueue绝对值得一看。

如果处理一个作业需要100-300毫秒,相比之下,队列的延迟可能相当小。使用上述任何一种技术都不难将队列延迟降低到几毫秒。