中间件消息传递软件性能低下的影响因素



我计划在我的web应用程序中集成消息中间件。现在我正在测试不同的消息中间件软件,如RabbitMQ、JMS、HornetQ等。这个软件提供的例子正在工作,但它没有给出预期的结果。
所以,我想知道哪些因素对提高成绩有责任是我们应该注意的?
开发人员应该注意哪些方面来提高中间件消息传递软件的性能?

我是HornetQ的项目负责人,但我会尽量给你一个通用的答案,可以适用于你选择的任何消息系统。

我看到一个常见的问题是人们问为什么一个单一的生产者/消费者不能给你预期的性能。

当您发送消息,并要求立即确认时,您需要等待:

  • 消息从客户端传输到服务器
  • 在磁盘上持久化的消息
  • 服务器通过向客户端发送回调来确认收到消息

同样地,当你接收一条消息时,你向服务器进行ACK:

  • ACK从客户端发送到服务器
  • ACK被持久化
  • 服务器返回一个回调,说明回调已经完成

如果你需要确认所有的消息发送和消息ack,你需要等待这些步骤,因为你有一个硬件参与持久化磁盘和在网络上发送比特。

Message Systems将尝试与许多生产者和许多消费者一起扩大规模。也就是说,如果有很多客户机在生产,那么它们都应该使用服务器上为所有消费者共享的可用资源。

有很多方法可以加快单个生产者或单个消费者的速度:

  • 一个是使用事务。因此,您可以最小化在服务器上持久化和在网络上往返时在磁盘上执行的块和同步。(这实际上在任何数据库上都是一样的)

  • 另一个,是通过使用回调而不是阻塞在消费者。(JMS 2正在提议一个类似于HornetQ上的ConfirmationHandler的Callback)

还有:我知道的大多数供应商都会在他们的文档中有一个性能部分,其中包含对特定产品的需求和建议。

最新更新