Java客户端和Java“后端”之间的高性能消息传递

3
我有一个基本的Java消息应用程序,可以将JAVA对象发送到远程服务器进行处理。我在通讯双方都使用了Spring支持,并使用ActiveMQ作为我的JMS提供者。它运行良好-我们已经没有遇到过10个同时发送消息的客户端的任何实际问题。
然而,我们现在真正想要扩展。客户数量可能会增加到约500个。此外,每个客户端使用的带宽比最初声明的更成问题。
我想知道是否有人认为ActiveMQ是这项工作的正确工具,或者基于套接字的TCP/UDP会帮助我们更好地扩展。由于我们只使用基本的Spring JMS模板支持,对AMQ的一些“高级”功能并不熟悉。
如有评论/想法,请不吝赐教。
谢谢!

1
你可能需要更详细地解释一下你的情况。消息频率/消息大小会影响。你有持久化消息吗?有任何HA设置(任何共享磁盘或数据库持久存储)吗?你计划在几台服务器上分配负载吗?有基于套接字的解决方案非常轻量级,例如http://www.zeromq.org/ 但这可能需要您重新发明一些轮子,并进行适当的设计,否则您将无法通过扩展AMQ/JMS解决方案来实现。如果负载高,您不能只添加一个服务器吗? - Petter Nordlander
“在高负载情况下,你不能只是添加服务器吗?”... 首先,你需要确定瓶颈发生的位置以确定需要扩展的目标,无论是在生产者、消费者还是代理层面。 - raffian
1个回答

3
不知道您想达到什么样的服务质量和SLA,但无论是哪种应用程序,我在评估消息服务实现时遵循的基本规则如下... 性能优先于可靠性
  • 快速消息传递
  • 可接受间歇性消息丢失
  • 消息不需要持久化
  • 成本低廉或者没有成本
在这种情况下,像ZeroMq(以及其他类似产品)就足够了,因为它在套接字级别上工作,是分散的,提供极低的延迟,在大型分布式系统中具有良好的可扩展性,并且是开源的,因此成本可以忽略不计。如果有一些用例需要持久性和可靠性,请准备好实施传统消息中间件提供的自定义解决方案(持久性、可靠性、复制等)。 平衡性能和可靠性
  • 性能和可靠性同等重要
  • 不能丢失消息
  • 消息需要持久化
  • 需要一些支持
  • 成本相对较低
在这种情况下,像ActiveMQ、RabbitMq等产品就起到了作用。基于代理的中间件解决可靠性和持久性问题,同时提供良好的性能和可扩展性。支持成本通常足够小型和中型公司负担得起,而不会让它们破产。可以说大多数消息需求都属于这个范畴,因为它提供了对性能和可靠性的可访问性,并且您可以根据未来的需要在牺牲一个方面的基础上改变另一个方面,而无需由于多年前做出错误选择而替换整个消息基础架构。 可靠性优先于性能
  • 可靠性最重要
  • 不能丢失消息
  • 消息需要重传
  • 群集、HA、复制等应该自带
  • 需要企业级全球支持和专业服务
  • 成本高昂
金融公司、交易系统、银行应用程序等通常具有此类需求,其中消息系统的可靠性与其附加的货币价值相关,当事情不能正常工作时,就会损失资金。因此,消息持久性、HA/容错、故障切换等非常重要。如果费用不是问题,请考虑使用WebLogic、Websphere、SonicMQ或TIBCO等产品,它们都很昂贵,但都提供了可靠的可靠性、企业支持和在负载下表现良好。我使用过SonicMQ,它是一个非常好的产品,速度快、可靠性高,但成本极高。
希望能对您有所帮助...

非常有用的回复。我认为Active-MQ符合我们的要求,就像你在这里描述的那样。谢谢。 - totalcruise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接