PHP Profi

Производительность AMQP-клиентов на PHP. Benchmark`и всех! Перевод

Рост популярности AMQP interop вызвал волну вопросов относительно того, какой адаптер является самым быстрым. В этом посте я хочу поделиться своими выводами о производительности постановки сообщений в очередь. Позже будет подобный пост о "разгребании" очереди.

Рассмотрим:

а также их адаптеры с имплементацией AMQP interop:

и один из мира Golang:

Мы собираемся сравнить производительность библиотек, а также затраты на их обёртку с имплементацией AMQP interop. Было бы также интересно сравнить реализации на PHP с чем-то из другого мира, чтобы почувствовать разницу. Я выбрал библиотеку на Go streadway/amqp, которая, кажется, широко используется.


Небольшое примечание по методологии. Я запускал бенчмарки на дроплете DigitalOcean ИКТ (1Gb RAM, 1 CPU, Ubuntu 16.04 x64) внутри docker-контейнеров. Каждый запуск был сделан в новых контейнерах. Исходный код можно найти здесь.

Картинка стоит тысячи слов, поэтому вот немного статистики:

Проверьте сами

Вы можете запустить тесты самостоятельно. Для этого вам нужно скачать enqueue-dev репозиторий, установить зависимости и запустить скрипт замера. Как то так:

git clone https://github.com/php-enqueue/enqueue-dev.git
composer install
BODY_SIZE=10000 ./bin/bench bench/AmqpExtBench.php --report=aggregate

Заключение

  • amqp-ext является самымы быстрым среди всех реализаций на PHP.
  • bunny почти так же быстр, как расширение AMQP.
  • php-amqplib иногда два раза медленнее, чем другие решения.
  • Интересно, что скрипт на Go был настоящим победителем только для очень небольшой нагрузки. Для остальных он показал чуть лучший результат, чем amqp-ext. Он должен был быть гораздо лучше, ИМО.
2017-12-22 оригинал

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий