Факторы, влияющие на низкую производительность промежуточного программного обеспечения для обмена сообщениями - PullRequest
2 голосов
/ 15 сентября 2011

Я планирую интегрировать промежуточное ПО обмена сообщениями в свое веб-приложение. Прямо сейчас я тестирую различные программы для обмена сообщениями, такие как RabbitMQ, JMS, HornetQ и т. Д. Примеры, предоставляемые с этим программным обеспечением, работают, но не дают желаемых результатов.
Итак, я хочу знать, что является факторами, которые ответственны за улучшение производительности, которые следует держать в глазах?
В каких областях разработчик должен позаботиться о повышении производительности программного обеспечения для обмена сообщениями промежуточного программного обеспечения?

1 Ответ

1 голос
/ 15 сентября 2011

Я руководитель проекта для HornetQ, но я постараюсь дать вам общий ответ, который можно применить к любой системе сообщений, которую вы выберете.

Обычный вопрос, который я вижу, это то, что люди спрашивают, почему один производитель / один потребитель не даст вам ожидаемой производительности.

Когда вы отправляете сообщение и сразу запрашиваете подтверждение, вам нужно подождать:

  • Передача сообщений от клиента к серверу
  • Сообщение сохраняется на диске
  • Сервер, подтверждающий получение сообщения, отправив обратный вызов клиенту

Аналогично, когда вы получаете сообщение, вы отправляете ACK на сервер:

  • ACK отправляется с клиента на сервер
  • ACK сохраняется
  • Сервер отправляет обратный вызов, сообщая, что обратный вызов достигнут

И если вам нужно подтверждение для всех ваших отправок сообщений и сообщений, вам нужно подождать этих шагов, поскольку у вас есть оборудование, необходимое для сохранения диска и отправки битов в сети.

Системы сообщений будут стремиться к расширению со многими производителями и многими потребителями. То есть, если многие производят, все они должны использовать ресурсы, доступные на сервере, совместно используемом для всех потребителей.

Есть способы ускорить одного производителя или одного потребителя:

  • Одним из них является использование транзакций. Таким образом, вы минимизируете блоки и синхронизацию, которые вы выполняете на диске, сохраняя при этом на сервере и циклические переходы в сети. (Это фактически одинаково для любой базы данных)

  • Еще один способ - использовать обратные вызовы вместо блокирования у потребителя. (JMS 2 предлагает Callback, похожий на ConfirmationHandler на HornetQ).

Кроме того: большинство знакомых мне провайдеров будут иметь разделы по производительности в своих документах с требованиями и предложениями для этого конкретного продукта. Вы должны смотреть индивидуально на каждый продукт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...