test: compare_sqs.sh benchmark Yandex MQ vs shared-sqs + thinking log
This commit is contained in:
@@ -202,3 +202,97 @@ no persistence, no auth. shared-sqs закрывает уникальную ни
|
||||
- `bd8303c` — stress_test.sh v2 (15 секций)
|
||||
- `2410331` — reduce to 20 workers
|
||||
- `eaed7bd` — final params tuning
|
||||
|
||||
---
|
||||
|
||||
## Задача: Сравнительный бенчмарк Yandex MQ vs shared-sqs
|
||||
|
||||
### Контекст
|
||||
Пользователь создал очередь `foropus` в Yandex Message Queue (managed service).
|
||||
Хочет объективно сравнить свой shared-sqs с коммерческим Yandex MQ.
|
||||
Условие: оба теста запускаются из одной точки (локаль) — чтобы сетевые условия были равны.
|
||||
|
||||
### Подготовка
|
||||
1. Создан SA `fork8s` с ключом `YCAJEQDz_Eg_i4C4M7TAen2fd`
|
||||
2. Назначена роль `ymq.admin` на каталог `default` (b1gj6dgm692ri5dl865t)
|
||||
3. Созданы очереди: `foropus` (с DLQ → `foropus-dlq`, maxReceiveCount=5)
|
||||
4. Очереди попали в каталог `kube` (b1g93ra3og5pd1t8e4lo) — привязка SA
|
||||
|
||||
### Первый бенчмарк (quick compare_sqs.sh)
|
||||
|
||||
Тесты: sequential send, sequential recv+del, parallel send, burst, GetQueueAttributes.
|
||||
Все запущены из локали (~100ms RTT до обоих серверов).
|
||||
|
||||
**Результаты:**
|
||||
|
||||
| Тест | Yandex MQ | shared-sqs | Разница |
|
||||
|------|-----------|------------|---------|
|
||||
| Seq Send (20 msg) | 1677ms avg | 1345ms avg | **OURS +20%** |
|
||||
| Seq Recv+Del (20 msg) | 4014ms avg | 2644ms avg | **OURS +34%** |
|
||||
| Parallel Send (50 msg) | 20976ms, 2 msg/s | 20338ms, 2 msg/s | Паритет |
|
||||
| Burst (30 simultaneous) | 10253ms | 13958ms | **YMQ +26%** |
|
||||
| GetQueueAttributes (5x) | 1191ms avg | 2080ms avg | **YMQ +43%** |
|
||||
| Надёжность | 100% (all ok) | 100% (all ok) | Паритет |
|
||||
|
||||
### Анализ результатов
|
||||
|
||||
**Почему shared-sqs быстрее в sequential операциях:**
|
||||
- Yandex MQ — managed service с дополнительными слоями (API gateway, IAM, durability guarantees)
|
||||
- shared-sqs — single pod, in-memory primary, минимальный overhead
|
||||
- Каждый seq запрос проходит полный RTT; у нашего сервера меньше internal latency
|
||||
|
||||
**Почему Yandex быстрее в burst/parallel:**
|
||||
- У Yandex — горизонтально масштабируемая инфраструктура, CDN, балансировщики
|
||||
- У нас — single pod с глобальным мьютексом; burst сериализуется
|
||||
- GetQueueAttributes: у Yandex скорее всего кешируется на edge
|
||||
|
||||
**Важно:** throughput ~2 msg/s — это ботлнек AWS CLI (не серверов).
|
||||
Каждый вызов `aws sqs` = python startup + TLS handshake + sign + request + parse.
|
||||
Реальный throughput обоих серверов намного выше.
|
||||
|
||||
### Вывод
|
||||
Для single-pod pet-проекта — результат **выдающийся**. Бить managed Yandex MQ
|
||||
по sequential latency — это значит что core logic работает эффективно.
|
||||
Проигрыш по burst — ожидаем (архитектурное ограничение, не баг).
|
||||
|
||||
### План серьёзного сравнительного тестирования
|
||||
|
||||
Текущий бенчмарк — лёгкий (20-50 msg). Нужен **полный**, покрывающий ВСЕ команды
|
||||
и сценарии обоих сервисов.
|
||||
|
||||
**Секции:**
|
||||
|
||||
1. **Все 17 команд SQS** — функциональная корректность на обоих
|
||||
- CreateQueue, DeleteQueue, GetQueueUrl, ListQueues
|
||||
- SendMessage, SendMessageBatch
|
||||
- ReceiveMessage
|
||||
- DeleteMessage, DeleteMessageBatch
|
||||
- ChangeMessageVisibility, ChangeMessageVisibilityBatch
|
||||
- GetQueueAttributes, SetQueueAttributes
|
||||
- PurgeQueue
|
||||
- TagQueue, UntagQueue, ListQueueTags
|
||||
|
||||
2. **Latency per command** — avg/min/max/p95 для каждой команды (10+ итераций)
|
||||
|
||||
3. **Throughput** — сколько msg/sec каждый сервис может принять/отдать при:
|
||||
- 1 worker (baseline)
|
||||
- 5 workers
|
||||
- 10 workers
|
||||
- 20 workers
|
||||
|
||||
4. **Message sizes** — 1KB, 10KB, 64KB, 256KB — влияние на latency/throughput
|
||||
|
||||
5. **Batch efficiency** — SendMessageBatch 1/5/10 entries vs single sends
|
||||
|
||||
6. **Long polling** — WaitTimeSeconds 0 vs 5 vs 20, latency до первого сообщения
|
||||
|
||||
7. **Visibility timeout** — ChangeMessageVisibility под нагрузкой, корректность
|
||||
|
||||
8. **Queue operations** — скорость создания/удаления 50 очередей
|
||||
|
||||
9. **Error handling** — поведение при невалидных запросах (скорость отказа)
|
||||
|
||||
10. **Sustained load** — 5 минут непрерывной нагрузки, деградация во времени
|
||||
|
||||
**Формат:** bash скрипт `tests/benchmark_full.sh`, запуск из локали,
|
||||
вывод CSV + итоговая таблица в stdout.
|
||||
|
||||
Reference in New Issue
Block a user