Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Бенчмарки

Во что ruststream-kinesis обходится на каждой записи: пропускная способность против сырого клиента aws-sdk-kinesis, инструкции и выделения памяти его кода.

Против сырого клиента​

Первый график прогоняет каждый сценарий тремя способами на одной и той же конечной точке Kinesis. «Сырой клиент» напрямую работает с aws-sdk-kinesis. «Крейт брокера» читает подписку этого крейта собственным циклом, без рантайма. «RustStream» - сервис, который пишет пользователь: обработчик #[subscriber] в приложении. Первая разность показывает, сколько этот крейт стоит поверх клиента, которого он оборачивает, а вторая - сколько сверху добавляет рантайм.

Каждый цикл изображён полосой от лучшего круга до самого медленного: точка отмечает лучший круг, засечка - медиану. Ноль оси - лучший круг сырого клиента, и точка правее нуля значит, что цикл медленнее. Пустая точка отмечает цикл, у которого разница с сырым клиентом меньше разброса кругов. Таблица под графиком печатает лучший круг, а в скобках медиану.

Оба сценария читают один сегмент и записывают контрольную точку после каждой записи. Они различаются тем, куда уходит контрольная точка. Первый хранит её в процессе, как стандартное хранилище аренд. Второй записывает её в таблицу DynamoDB условной записью. Сырой цикл записывает ту же контрольную точку в то же место, поэтому две строки различаются хранилищем, а не крейтом.

Стоимость кода​

Второй график считает, во что обходится одна запись на потоке выполнения сервиса: инструкции под callgrind и выделения памяти под DHAT, в установившемся режиме. Каждый сценарий - сервис на KinesisBroker против той же конечной точки, со стандартным хранилищем аренд. В счёт входят диспетчеризация фреймворка и код этого крейта. Входит в него и работа AWS SDK на этом потоке выполнения: сборка и подпись каждого запроса, обмен по HTTP и разбор каждого ответа. Эта работа составляет большую часть каждого числа и почти всю строку ответа, поэтому эти числа не сравнимы с числами брокера, клиент которого работает в собственных потоках выполнения. «Холодный старт» - разовая стоимость подключения, открытия подписки, получения списка сегментов, взятия аренды и итератора и получения первой записи.

Результаты​

Против сырого клиентаНасколько каждый цикл отстаёт от лучшего круга сырого клиента
  • Сырой клиент
  • Крейт брокера
  • RustStream
  • круги, от лучшего до самого медленного
  • лучший круг
  • медианный круг
  • разброс кругов
  • неразличимо

ruststream-kinesis 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.11-x64v3-xanmod1-1, localstack/localstack:4.14.0 (Kinesis and DynamoDB emulator) in Docker on localhost, not AWS, измерено 2026-10-18. Как сняты числа

one shard, 512 B JSON, in-process checkpoints
  • неразличимо
  • неразличимо
one shard, 512 B JSON, DynamoDB checkpoints
  • неразличимо
  • неразличимо
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
one shard, 512 B JSON, in-process checkpoints358 msg/s (342)363 msg/s (346) (неразличимо к клиенту)365 msg/s (340)неразличимо
one shard, 512 B JSON, DynamoDB checkpoints75 msg/s (75)79 msg/s (74) (неразличимо к клиенту)77 msg/s (77)неразличимо
Стоимость кода

AMD Ryzen 9 7900X 12-Core Processor, x86_64, 427-5912 MHz, 12 physical, 24 logical, 62.4 GiB, unknown, Linux 7.2.11-x64v3-xanmod1-1, 1.99.0, 3.25.1, bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only), ruststream-kinesis dynamodb-lease, ruststream macros,json. ruststream-kinesis 0.7.0, ruststream 0.7.0, измерено 2026-10-18.

Инструкции
Выделения
one shard, JSON decode into a small struct, ack each
16 367,6
12,5
one shard, reply with PutRecord through this crate's default policy
368 050,9
395,6
one shard, batches of 64, one read per batch
21 572,3
18,3
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
one shard, JSON decode into a small struct, ack each16 367,612,53 952 857 / 4 249
one shard, reply with PutRecord through this crate's default policy368 050,9395,64 236 029 / 4 579
one shard, batches of 64, one read per batch21 572,318,34 028 415 / 4 310

Машина​

ПроцессорAMD Ryzen 9 7900X 12-Core Processor
Архитектураx86_64
Частота427-5912 MHz
Ядра12 physical, 24 logical
Память62.4 GiB
Скорость памятиunknown
Операционная системаLinux 7.2.11-x64v3-xanmod1-1
Эмуляторlocalstack/localstack:4.14.0 (Kinesis and DynamoDB emulator) in Docker on localhost, not AWS
Круговая задержка4.755 ms (DescribeStreamSummary, 2104 calls on one client)
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-kinesis dynamodb-lease, ruststream macros,json
RUSTFLAGSnone (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU)
Valgrind3.25.1

Числа берутся из файла docs/benchmarks/results.json этой версии, который записывают рецепты бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они позволяют сделать, - страница Числа.