Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Бенчмарки
Во что RustStream обходится на каждом сообщении: в сравнении с сырым клиентом брокера и в стоимости собственного кода.
Между клиентом брокера и обработчиком фреймворк тратит время на каждое сообщение: поток подписки, декодирование, диспетчеризация, ack. Эта страница показывает эту стоимость двумя измерениями:
- Против сырого клиента. Пропускная способность фреймворка и сырого клиента на настоящем брокере очереди, на одной машине и на одной работе. Отвечает, во что фреймворк обходится развёрнутому сервису.
- Стоимость кода. Инструкции и выделения памяти на сообщение. В
ruststreamэто собственный код фреймворка, без брокера очереди. Отвечает, что изменилось вместе с кодом. Точности хватает, чтобы отклонить пул-реквест, который сделал сообщение дороже.
Каждый крейт измеряет себя сам по общей методологии и
публикует свои числа. Эта страница загружает их из ветки main в репозитории
крейта и показывает каждый крейт на отдельной вкладке. Новый замер появляется на вкладке сразу после
слияния. Какие выводы числа позволяют, а какие нет, объясняет страница Числа.
Против сырого клиента
Первый график на вкладке брокера - сравнение с сырым клиентом. Как его читать:
- у каждого сценария три цикла по три чередующихся круга. Ноль оси - лучший круг сырого клиента;
- цикл изображён полосой от лучшего круга до самого медленного. Точка отмечает лучший круг, засечка - медиану. Точка правее нуля значит, что цикл медленнее сырого клиента;
- затенённая полоса вокруг нуля - разброс от лучшего круга до худшего, на нём держится вердикт «неразличимо» для RustStream. Лучший круг внутри полосы нельзя отличить от сырого клиента;
- пустая точка отмечает цикл, который крейт признал неразличимым. Вердикты справа от строки опубликовал сам крейт;
- при наведении или фокусе строка показывает свои числа. Таблица под графиком перечисляет их все: лучший круг, а в скобках медиану;
- «Адаптация библиотеки брокера» - собственные консьюмер и издатель адаптации без рантайма. Две разности читаются отдельно: сколько адаптация стоит поверх клиента брокера и сколько добавляет рантайм;
- сценарии плагина, который поставляет крейт, вынесены на отдельный график со своей осью. Три цикла там - одно и то же приложение: без плагина, с плагином, написанным вручную, и с плагином библиотеки. Таблица плагина и вердикт рядом с плагином библиотеки показывают и его оверхед к плагину, написанному вручную.
Лучший круг ближе всего к стоимости без помех, а медиана показывает типичный круг (подробнее об отчёте).
Стоимость кода
График стоимости кода замыкает каждую вкладку, а у ядра он единственный. Он показывает для каждого сценария, сколько инструкций и выделений памяти уходит на одно сообщение в установившемся режиме. Числа абсолютные. Стоимость фреймворка поверх настоящего клиента брокера показывает сравнение.
В ruststream этот график считает только собственный код фреймворка: измерение идёт на
внутрипроцессном транспорте. Адаптация библиотеки брокера измеряет себя на настоящем транспорте, а
что входит в её числа, сообщает страница бенчмарков адаптации.
У каждого крейта своя ось: адаптация брокера считает и работу своего клиента.
«Холодный старт» считает запуск сервиса вместе с обработкой первого сообщения. Эти инструкции и выделения сервис тратит один раз, а не на каждом сообщении. Строка показывает его при наведении или фокусе, а таблица под графиком перечисляет.
Строка над графиком крейта описывает машину прогона вплоть до памяти, затем называет версии крейта и
ruststream, на которых шёл замер, и его дату. Счётчики инструкций с разных машин сравнимы, только
если на них собран один и тот же код.
Результаты
- RustStream
- NATS
- Redis
- RabbitMQ
- Kafka
- AMQP 1.0
- Google Cloud Pub/Sub
- AWS SQS / SNS
- Apache Pulsar
- MQTT 5
- ZeroMQ
- Stream files / stdio
- AWS Kinesis
- SQL databases
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...
Загружаем опубликованные результаты...