Подтвердить что ты не робот

Увеличьте пропускную способность с помощью RabbitMQ

В нашем проекте мы хотим использовать RabbitMQ в шаблоне "Очереди задач" для передачи данных.

На стороне производителя мы создаем несколько TCP-серверов (в node.js) для recv высокие параллельные данные и отправить его в MQ без каких-либо действий.

На стороне потребителя мы используем JAVA-клиент для получения данных задачи из MQ, обработайте его, а затем ack.

Итак, вопрос: Чтобы получить максимальную пропускную способность/производительность передачи сообщений (например, 400 000 мс/с), Сколько очередей лучше? Чем больше очередей, тем лучше производительность/производительность? И есть ли что-нибудь еще, что я должен заметить? Любые известные рекомендации по использованию RabbitMQ в таком сценарии?

Любые комментарии очень ценятся!

4b9b3361

Ответ 1

Для лучшей производительности в RabbitMQ следуйте советам своих создателей. Из блога RabbitMQ:

Очереди RabbitMQ быстрее, когда они пусты.. Когда очередь пустой, и у него есть потребители, готовые получать сообщения, а затем, как только сообщение принимается очередью, оно идет прямо к потребитель. В случае постоянного сообщения в надежной очереди да, он также перейдет на диск, но это будет сделано асинхронно и буферизуется в значительной степени. Главное, что очень мало бухгалтерского учета необходимо сделать очень мало структур данных, и очень требуется небольшая дополнительная память.

Если вы действительно хотите углубиться в производительность очередей RabbitMQ, эта другая запись в блоге их значительно больше входит в данные.

Ответ 2

В соответствии с ответом, который я получил от группы рассылки rabbitmq-discuss, есть другие вещи, которые вы можете попытаться увеличить пропускную способность и уменьшить задержку:

  • Используйте большой счет предварительной выборки. Небольшие значения ухудшают производительность.

  • Обмен темой происходит медленнее, чем прямой обмен или обмен фанатов.

  • Убедитесь, что очереди остаются короткими. Более длинные очереди налагают больше обработки накладные расходы.

  • Если вам нужны латентность и скорость сообщений, используйте более мелкие сообщения. Используйте эффективный формат (например, избегайте XML) или сжимайте полезную нагрузку.

  • Экспериментируйте с HiPE, что помогает производительности.

  • Избегайте транзакций и настойчивости. Также избегайте публикации в ближайшее время. или обязательный режим. Избегайте HA. Кластеризация также может влиять на производительность.

  • Вы получите лучшую пропускную способность в многоядерной системе, если у вас есть несколько очередей и потребителей.

  • Используйте как минимум v2.8.1, который вводит управление потоком. Убедитесь, что память и дисковое пространство никогда не запускаются.

  • Виртуализация может наложить небольшое ограничение производительности.

  • Настройте свою ОС и сетевой стек. Удостоверьтесь, что вы обеспечиваете более чем достаточно ОЗУ. Обеспечьте быстрые ядра и оперативную память.

Ответ 3

Вы увеличите пропускную способность с большим количеством предварительных выборок и в то же время ACK несколько сообщений (вместо отправки ACK для каждого сообщения) от вашего потребителя.

Но, конечно, ACK с несколькими флагами (http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack) требует дополнительной логики для вашего потребительского приложения (http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html). Вам нужно будет хранить список тегов доставки сообщений, переданных от брокера, их статус (независимо от того, обрабатывало ли ваше приложение их или нет) и ACK каждый N-й тег доставки (NDTAG), когда все сообщения с доставкой -tag меньше или равно NDTAG.