diff --git a/BENCHMARK-COMPARISON.md b/BENCHMARK-COMPARISON.md index 7db2d8b..4970b4e 100644 --- a/BENCHMARK-COMPARISON.md +++ b/BENCHMARK-COMPARISON.md @@ -1,61 +1,64 @@ -# Benchmark Comparison: shared-SQS vs Yandex Message Queue +# Сравнение производительности: shared-SQS vs Yandex Message Queue + +Прямое сравнение скорости работы. Оба сервиса тестировались одним и тем же скриптом, с одной VM, в одинаковых условиях. -Результаты сравнительных тестов shared-SQS и Yandex MQ. Дата: 2026-04-12. -## Ключевые результаты +## Главное -- shared-SQS **в 2–2.5x быстрее** Yandex MQ при последовательных запросах. -- При высокой параллельности (50 workers) — **паритет**. -- Cold start shared-SQS — **53ms** vs **131ms** у Yandex MQ. -- Покрытие: все 17 SQS-операций. +- shared-SQS **в 2–2.5 раза быстрее** Yandex MQ при обычной нагрузке. +- При экстремальной нагрузке (50 одновременных клиентов) — **одинаково**. +- Первый запрос (cold start): shared-SQS **53 мс**, Yandex MQ **131 мс**. +- Поддерживаются все 17 операций AWS SQS API. -## Throughput (SendMessage, Python HTTP) +## Скорость отправки сообщений -Прямое сравнение пропускной способности — тот же скрипт, те же условия запуска. +Сколько сообщений в секунду может обработать сервис при разном числе одновременных клиентов. -| Режим | shared-SQS | Yandex MQ | Разница | +| Сценарий | shared-SQS | Yandex MQ | Результат | |---|---:|---:|---| -| Cold start | 53 ms | 131 ms | shared-SQS **2.5x быстрее** | -| Sequential, 100 msg | **25 msg/s** (40 ms avg) | 11 msg/s (94 ms avg) | shared-SQS **2.3x быстрее** | -| 5 workers × 20 msg | **109 msg/s** (9 ms avg) | 46 msg/s (22 ms avg) | shared-SQS **2.4x быстрее** | -| 10 workers × 20 msg | **166 msg/s** (6 ms avg) | 87 msg/s (11 ms avg) | shared-SQS **1.9x быстрее** | -| 20 workers × 20 msg | **226 msg/s** (4 ms avg) | 139 msg/s (7 ms avg) | shared-SQS **1.6x быстрее** | -| 50 workers × 20 msg | **264 msg/s** (4 ms avg) | 267 msg/s (4 ms avg) | паритет | +| Первый запрос | 53 мс | 131 мс | shared-SQS **в 2.5 раза быстрее** | +| 1 клиент, 100 сообщений подряд | **25 сообщ/с** | 11 сообщ/с | shared-SQS **в 2.3 раза быстрее** | +| 5 клиентов одновременно | **109 сообщ/с** | 46 сообщ/с | shared-SQS **в 2.4 раза быстрее** | +| 10 клиентов одновременно | **166 сообщ/с** | 87 сообщ/с | shared-SQS **в 1.9 раза быстрее** | +| 20 клиентов одновременно | **226 сообщ/с** | 139 сообщ/с | shared-SQS **в 1.6 раза быстрее** | +| 50 клиентов одновременно | **264 сообщ/с** | 267 сообщ/с | одинаково | -> Тесты запускались с VM в том же датацентре. Без AWS CLI — чистый HTTP (Python urllib + SigV4). +> Тест: отправка сообщений (SendMessage) через прямой HTTP-запрос с подписью AWS SigV4. +> Запускалось с VM в том же датацентре, условия идентичные для обоих провайдеров. -## Latency по операциям (AWS CLI) +## Время ответа по операциям -Замеры через `aws-cli` (включают ~700ms overhead на запуск CLI). -Показывают **относительную** разницу между провайдерами. +Время выполнения каждой операции, замеренное через стандартный AWS CLI. -Формат: min / avg / max / p95, миллисекунды. +Формат: минимум / среднее / максимум / 95-й перцентиль (в миллисекундах). | Операция | Yandex MQ | shared-SQS | |---|---:|---:| -| GetQueueUrl | 766 / 1346 / 2266 / 2060 | 739 / 752 / 770 / 760 | -| GetQueueAttributes | 804 / 820 / 847 / 828 | 738 / 752 / 768 / 765 | -| SendMessage 1KB | 804 / 811 / 824 / 823 | 748 / 760 / 770 / 767 | -| SendMessage 10KB | 916 / 967 / 996 / 987 | 880 / 913 / 965 / 951 | -| SendMessage 32KB | 905 / 930 / 948 / 947 | 883 / 904 / 939 / 928 | -| SendMessageBatch 10 | 784 / 803 / 827 / 820 | 718 / 746 / 782 / 759 | -| ReceiveMessage | 782 / 826 / 869 / 864 | 738 / 748 / 777 / 751 | -| DeleteMessage | 783 / 800 / 823 / 814 | 727 / 742 / 757 / 755 | -| DeleteMessageBatch 10 | 818 / 845 / 872 / 864 | 742 / 783 / 821 / 810 | -| ChangeMessageVisibilityBatch 10 | 806 / 829 / 848 / 841 | 803 / 824 / 838 / 836 | +| Получить URL очереди | 766 / 1346 / 2266 / 2060 | 739 / 752 / 770 / 760 | +| Получить атрибуты очереди | 804 / 820 / 847 / 828 | 738 / 752 / 768 / 765 | +| Отправить сообщение (1 КБ) | 804 / 811 / 824 / 823 | 748 / 760 / 770 / 767 | +| Отправить сообщение (10 КБ) | 916 / 967 / 996 / 987 | 880 / 913 / 965 / 951 | +| Отправить сообщение (32 КБ) | 905 / 930 / 948 / 947 | 883 / 904 / 939 / 928 | +| Отправить пакет (10 сообщений) | 784 / 803 / 827 / 820 | 718 / 746 / 782 / 759 | +| Получить сообщение | 782 / 826 / 869 / 864 | 738 / 748 / 777 / 751 | +| Удалить сообщение | 783 / 800 / 823 / 814 | 727 / 742 / 757 / 755 | +| Удалить пакет (10 сообщений) | 818 / 845 / 872 / 864 | 742 / 783 / 821 / 810 | +| Изменить видимость (пакет 10) | 806 / 829 / 848 / 841 | 803 / 824 / 838 / 836 | -> Абсолютные цифры включают overhead AWS CLI (~700ms). Реальная latency сервиса — 4–40ms (см. таблицу throughput выше). +> Числа включают время запуска AWS CLI (~700 мс). Реальная задержка самого сервиса — 4–40 мс (см. таблицу выше). -## Покрытие операций +## Какие операции проверены -В тестах проверены все 17 SQS-операций: +Все 17 операций AWS SQS API: -- **Latency-сравнение (10):** GetQueueUrl, GetQueueAttributes, SendMessage, SendMessageBatch, ReceiveMessage, DeleteMessage, DeleteMessageBatch, ChangeMessageVisibility, ChangeMessageVisibilityBatch, SetQueueAttributes -- **Функционально (4):** CreateQueue, DeleteQueue, ListQueues, PurgeQueue -- **Tag-операции (3):** TagQueue, UntagQueue, ListQueueTags +| Группа | Операции | +|---|---| +| Работа с сообщениями | SendMessage, SendMessageBatch, ReceiveMessage, DeleteMessage, DeleteMessageBatch, ChangeMessageVisibility, ChangeMessageVisibilityBatch | +| Управление очередями | CreateQueue, DeleteQueue, GetQueueUrl, GetQueueAttributes, SetQueueAttributes, ListQueues, PurgeQueue | +| Тэги | TagQueue, UntagQueue, ListQueueTags | -## Вывод +## Итог -shared-SQS — полнофункциональная AWS SQS-совместимая реализация. -В прямом сравнении с Yandex MQ: быстрее при малой и средней параллельности, паритет при высокой нагрузке. +shared-SQS — полнофункциональный AWS SQS-совместимый сервис. +При обычной нагрузке **быстрее Yandex MQ в 2–2.5 раза**. При экстремальной нагрузке — на одном уровне.