【问题标题】:High Performance Messaging between Java Client and Java 'Back End'Java 客户端和 Java“后端”之间的高性能消息传递
【发布时间】:2013-05-23 00:25:55
【问题描述】:

我有一个基本的 Java 消息传递应用程序,它将 JAVA 对象发送到远程服务器进行处理。我在线路的两端都利用了 Spring 支持,并使用 ActiveMQ 作为我的 JMS 提供程序。它运行良好 - 我们没有遇到 10 个并发发送消息的客户端的实际问题。

但是,我们现在真的想扩大规模。客户数量可能会增加到 500 家左右。此外,每个客户端使用的带宽比最初声明的问题更大。

我想知道是否有人认为 ActiveMQ 是这项工作的正确工具 - 或者基于套接字的 TCP/UDP 是否会帮助我们更好地扩展。我们并不精通 AMQ 的一些“高级”特性,因为我们将它与基本的 Spring JMS 模板支持一起使用。

任何 cmets / 想法将不胜感激。

谢谢

【问题讨论】:

  • 您可能需要多解释一下您的情况。消息频率/消息大小起作用。您是否有持久消息?任何 HA 设置(任何共享磁盘或数据库持久存储)?您是否计划在多台服务器上分配负载?有一些非常轻量级的基于套接字的解决方案,例如zeromq.org,但这可能需要您重新发明一些轮子并进行适当的设计,而通过扩大 AMQ/JMS 解决方案是无法做到的。不能在高负载的情况下添加一个服务器吗?
  • Can't you just add a server in case of high load...首先,您需要确定瓶颈发生在哪里,以在生产者、消费者或/和代理级别进行扩展。

标签: java spring sockets jms activemq


【解决方案1】:

在不知道您要达到的服务质量和 SLA 的情况下,我在评估任何应用程序的消息服务实现时遵循的基本规则如下...

性能优于可靠性

  • 快速消息传递
  • 可以接受间歇性消息丢失
  • 消息是非持久的
  • 几乎没有成本

在这种情况下,像 ZeroMq(和其他类似产品)这样的产品就足够了,因为它在套接字级别工作、去中心化、提供极低的延迟并在大型分布式系统中很好地扩展,并且是开源的,因此成本可以忽略不计。如果某些用例需要持久性和可靠性,请准备好实施传统消息中间件提供的开箱即用的自定义解决方案(持久性、持久性、复制等)。

平衡性能和可靠性

  • 性能和可靠性同样重要
  • 不接受丢失的消息
  • 消息是持久的
  • 需要一些支持
  • 成本相对较低

这就是 ActiveMQ、RabbitMq 等产品发挥作用的地方。基于代理的中间件解决了可靠性和持久性问题,同时提供了良好的性能和可扩展性。支持成本通常足够低,中小型公司可以在不破产的情况下负担得起。可以肯定地说,大多数消息传递需求都属于这一类,因为它提供了对性能和可靠性的可访问性,并且随着应用程序的成熟,您可以根据未来的需求为另一个牺牲一个,而不会因为做出错误的选择而更换整个消息传递基础架构几年前。

可靠性高于性能

  • 可靠性是最重要的
  • 无法丢弃消息
  • 开箱即用的消息重新传递
  • 开箱即用的集群、HA、复制等。
  • 需要企业级的全球支持和专业服务
  • 成本高

金融公司、交易系统、银行应用程序等通常具有这样的要求,其中消息系统的可靠性与美元价值相关,而当事情不起作用时,就会损失金钱。因此,消息持久性、HA/容错、故障转移都非常重要。如果成本不是问题,请查看 WebLogic、Websphere、SonicMQ 或 TIBCO 等产品,它们价格昂贵,但都提供可靠的可靠性、企业支持并且在负载下表现良好。我使用过 SonicMQ,它是一款很棒的产品,非常快速且可靠,但它要花一大笔钱。

希望对你有帮助...

【讨论】:

  • 一个非常有用的回复。正如您在此处所描述的,我认为 Active-MQ 符合我们的要求。谢谢。
猜你喜欢
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多