2013-05-19 49 views
3

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

但是,我们现在真的想要扩展。客户数量可能会增加到大约500人。此外,每个客户端使用的带宽比最初宣布的更重要。

我想知道是否有人认为ActiveMQ是这项工作的正确工具 - 或者基于套接字的TCP/UDP是否会帮助我们扩展更好。我们并不熟悉AMQ的一些'高级'功能,因为我们使用基本的Spring JMS模板支持。

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

感谢

+1

你可能需要解释你的情况多一点。消息频率/消息大小在播放。您是否有持续的消息?任何HA设置(任何共享磁盘或数据库持久存储)?你是否打算分发多个服务器的负载? 有一些非常轻便的基于套接字的解决方案,例如http://www.zeromq.org/但是,这可能需要您重新设计一些轮子,并进行适当的设计,而不是通过扩展AMQ/JMS解决方案。在高负载的情况下,你不能只添加一台服务器吗? –

+0

'你能不能在高负荷情况下添加一台服务器......首先,你需要确定瓶颈发生的位置,以便在生产者,消费者或/和经纪人级别定位到哪里进行扩展。 – raffian

回答

3

不知道服务的品质是什么和SLA的你想实现的,在评估任何应用程序通讯服务实现时,我遵循的基本规则如下......

性能超过可靠性

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

在这种情况下,像ZeroMq(和其他人一样),产品就足够了,因为它工作在插座的水平,是分散的,提供了非常低在大型分布式系统中延迟和扩展性好,开源,因此成本可以忽略不计。如果某些用例需要持久性和可靠性,则准备实施传统消息中间件提供开箱即用(持久性,持久性,复制等)的定制解决方案。

平衡性能和可靠性

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

以下是ActiveMQ,RabbitMq等产品发挥作用的地方。基于代理的中间件解决了可靠性和持久性问题,同时提供了良好的性能和可扩展性。对于中小型企业来说,支持成本通常足够低,而不会打破银行业务。可以肯定地说,大多数消息传递需求属于这个类别,因为它提供了对性能和可靠性的可访问性,并且随着应用程序的成熟,您可以根据未来的需求为另一个牺牲另一个,而不会因为选择不当而丢失整个消息传递基础结构几年前。

可靠性在性能

  • 可靠性是最重要的
  • 消息不能被丢弃
  • 消息交还出来的现成
  • 集群,HA,复制等。可立即使用。
  • 需要企业级的全球支持和专业服务
  • 成本高

金融公司,交易系统,银行业务应用等,通常有这样的要求,其中信息系统的可靠性有一美元价值的附加对此,当事情不奏效时,金钱就会流失。因此,消息持久性,HA /容错性,故障切换都是非常重要的。如果成本不是问题,请查看像WebLogic,Websphere,SonicMQ或TIBCO等产品......这些产品非常昂贵,但都提供了可靠性,企业支持和负载下的良好性能。我已经使用SonicMQ,它是一款非常棒的产品,非常快速和可靠,但它需要一只手臂和一条腿。

希望它有帮助...

+0

非常丰富的回应。我认为Active-MQ符合我们的要求,正如您在此处所述。谢谢。 – totalcruise

相关问题