3

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

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

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

任何意见/想法将不胜感激。

谢谢

4

1 回答 1

3

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

性能高于可靠性

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

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

平衡性能和可靠性

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

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

可靠性高于性能

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

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

希望能帮助到你...

于 2013-05-20T14:41:57.423 回答