Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Числа
Что измеряют числа бенчмарков ruststream-nats и каких выводов они сделать не позволяют.
Сравнение с сырым клиентом
Три цикла одной строки сравнимы между собой: они шли в одном процессе, чередуясь, на одном сервере. Со строкой, которую публикует другой крейт брокера, строка не сравнима: транспорты выполняют на сообщение разную работу.
Сервер работает на той же машине, через loopback. Без сетевой задержки та же стоимость сообщения составляет большую долю времени, чем с сервером за сетью. Читайте процент как верхнюю границу того, что платит развёрнутый сервис.
Строка «неразличимо» - та, где циклы различаются меньше, чем разброс между их кругами. Число ниже этого шума выглядело бы точностью, которую никто не измерял, поэтому оно не публикуется. В JetStream каждая доставка отправляет серверу подтверждение, и такая малая разница теряется на его фоне.
Строка «упирается в брокер» - та, где консьюмер большую часть прогона ждал сервер. Работа крейта и рантайма тогда укладывается в это ожидание, и разница выходит около нуля. Это нижняя граница стоимости, а не её измерение.
Стоимость кода
Счёт инструкций включает код этого крейта, рантайм над ним и работу async-nats на потоке
сервиса, в том числе его задачу соединения. Он немного меняется от прогона к прогону, потому что
сервер настоящий. Тот же счёт стоит больше времени там, где код промахивается мимо кэша, поэтому
счёт инструкций - не время.
Каждое число - установившийся режим, разность между прогоном на 1000 доставок и прогоном на 2000. Подключение, поиск стрима, создание консьюмера и первые выделения памяти за ними - холодный старт, который оплачивается один раз.
Выделения памяти доставки JetStream в основном принадлежат клиенту: это pull-запрос на каждую сотню выданных сообщений и блоки канала между его задачей соединения и подпиской.
Чего они не значат
Строка - это один консьюмер, который читает один субъект, небольшое тело и один сервер. Она измеряет, сколько стоит доставка внутри этого крейта, а не сколько способен пропустить NATS.
Стрим JetStream хранится в памяти. Стрим с файловым хранилищем отвечает на другой вопрос: о сервере, а не об этом крейте. Очередь, пул партиций воркеров и несколько консьюмеров одного стрима тоже отвечают каждый на свой вопрос, и сравнение не измеряет ни один из них. График кода считает обработчик пакетов и ответ на том же стенде.
Числа - снимок одной машины в один день, а рядом с ними записана сборка. Их перемеряют вручную, на машине, отданной только прогону: различия, которые они показывают, меньше шума общей машины.