Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Числа
Что измеряют числа бенчмарков ruststream-sqs-sns и каких выводов они сделать не позволяют.
Сравнение с сырым клиентом
Три цикла одной строки сравнимы между собой: они шли в одном процессе, чередуясь, на одной конечной точке. Со строкой, которую публикует другой крейт брокера, строка не сравнима: транспорты выполняют на сообщение разную работу.
Каждое сообщение стоит собственного обмена по HTTP: вызова DeleteMessage за его ack. Эти
обмены задают темп обеих строк. В строке «упирается в брокер» они заняли не меньше половины
времени доставки. Работа крейта и рантайма тогда укладывается в ожидание, которое оплачивает и
сырой клиент, и разница между циклами - нижняя граница этой работы, а не её измерение.
Стоимость кода
Счёт инструкций включает рантайм, этот крейт и работу AWS SDK на потоке сервиса: сборку и подпись
каждого запроса, обмен по HTTP и разбор каждого ответа. Доставка оплачивает свою долю
ReceiveMessage и собственный DeleteMessage, а ответ добавляет SendMessage. Поэтому большая
часть каждого числа - работа SDK, а не этого крейта, и числа не сравнимы с числами брокера,
клиент которого работает в собственных потоках. Тот же счёт стоит больше времени там, где код
промахивается мимо кэша, поэтому счёт инструкций - не время.
Каждое число - установившийся режим, разность между прогоном на 1000 доставок и прогоном на 2000. Загрузка конфигурации AWS, разрешение очереди, чтение её тайм-аута видимости и первые выделения памяти за ними - холодный старт, который оплачивается один раз.
Чего они не значат
Стенд - LocalStack, эмулятор SQS и SNS, а не облачный сервис. Он отвечает по обычному HTTP через loopback, поэтому в замер не входят рукопожатие TLS, обновление учётных данных и задержка региона. Сравнение остаётся верным, потому что все три цикла работают с одним эмулятором. Пропускная способность не переносится: очередь в регионе отвечает в другом масштабе времени.
Все три цикла запрашивают 20-секундное ожидание. На очереди с накопленными сообщениями ожидание никогда не истекает, потому что получение отвечает, как только у него есть сообщения. Ожидание определяет только то, во что обходится пустая очередь.
Строка - это один потребитель, который читает одну очередь с небольшим телом. Она измеряет, сколько стоит доставка внутри этого крейта, а не сколько способен пропустить SQS. Строка FIFO распределяет сообщения по 64 группам сообщений, поэтому получение всегда находит группу, которую очередь не придерживает.
Числа - снимок одной машины в один день, а рядом с ними записана сборка. Их перемеряют вручную, на машине, отданной только прогону: различия, которые они показывают, меньше шума общей машины.