Files
SQS-service/doc/progress.md
T

6.8 KiB
Raw Blame History

SQS-service Progress

Версия v0.1.x

v0.1.19 (2026-04-11) — ТЕКУЩАЯ DEPLOYED

  • Валидация VisibilityTimeout (043200) в ReceiveMessage
  • Валидация WaitTimeSeconds (020) в ReceiveMessage
  • Пустой MessageBody → MissingParameter в SendMessage
  • quick_test: 31/31
  • hardcore_test: 114/116 (2 flaky — 100KB TLS, не баг сервера)
  • stress_test: 21/23 (2 flaky — сеть/nginx, не баг сервера)
  • Docker image: naeel/shared-sqs:v0.1.19
  • Helm: deployments/helm/shared-sqs/ appVersion v0.1.19

v0.1.18 (2026-04-11)

  • 4 новые API команды: ChangeMessageVisibilityBatch, TagQueue, UntagQueue, ListQueueTags
  • Итого API: 17 команд (полная Yandex/AWS SQS совместимость)
  • security: fix critical/high auth, idor, races and persistence
  • security: address medium risks in jwt, redis ordering and body limit
  • perf: optimize receive long polling and finalize formatting cleanup

v0.1.15 (2026-04-10)

  • JWT auth через nubes API (deck-api-test.ngcloud.ru)
  • Login page в UI (ввод токена → валидация → auto-provisioning tenant)
  • /ui/api/* защищены JWT middleware
  • TenantID совместим с sless namespace: sless-{SHA256(sub)[:8]}

v0.1.14 (2026-04-10)

  • Фикс критического дедлока в create_queue.go
  • Фикс UI: m.sentm.sent_at
  • Redis write-through persistence
  • TLS Ingress: qu.kube5s.ru

Security & Compatibility Wave (2026-04-10)

  • SigV4 подпись, IDOR fix, map race fix, persistence sync
  • shared_sqs_test.sh PASS=28 FAIL=0

Стресс-тестирование (2026-04-11)

Результаты stress_test.sh v2 (финальный прогон)

# Секция Результат Детали
1 Подготовка (тенанты, очереди) 3 тенанта, автогенерация AK/SK
2 Конкурентная отправка (10×20) 200/200 доставлено
3 Конкурентное чтение 200 прочитано, 200 удалено, 0 в очереди
4 Multi-tenant изоляция 0 чужих сообщений, 3×30=90 своих
5 Burst (50 одновременно) 50/50 доставлено
6 Kill pod + восстановление Данные из Redis — 100% recovery
7 Redis disconnect HTTP 200 из кеша, graceful degradation
8 Смешанная нагрузка (15s) * send+recv+delete+attr, 1 flaky attr
9 Cleanup Тенанты и очереди удалены

Итого: 21/23 , 2 (flaky сеть, не баги сервера)

Покрытие тестами

Тест Что проверяет Результат
quick_test.sh 17 SQS команд, smoke 31/31
hardcore_test.sh Edge cases, лимиты, ошибки 114/116
stress_test.sh Конкурентность, resilience, isolation 21/23
Всего 166/170 (97.6%)

Next Steps

  • Per-queue locking (заменить глобальный мьютекс на per-queue sync.RWMutex)
  • DLQ (Dead Letter Queue) — maxReceiveCount → перемещение в DLQ
  • Rate limiting per tenant
  • Prometheus метрики (exporter)
  • Горизонтальное масштабирование (leader election или Redis-based state)
  • Long polling оптимизация (channel-based вместо 100ms polling)
  • Go unit tests (go test ./...)

v0.1.15 (2026-04-10)

  • JWT auth через nubes API (deck-api-test.ngcloud.ru)
  • Login page в UI (ввод токена → валидация → auto-provisioning tenant)
  • Email пользователя в navbar
  • /ui/api/* защищены JWT middleware (больше не публичные)
  • TenantID совместим с sless namespace: sless-{SHA256(sub)[:8]}
  • Сессия в localStorage (token + email)
  • Docker build + deploy + E2E test

Known Limitations

  1. Глобальный мьютекс — SyncQueues.Lock() на весь сервис. При >50 rps — bottleneck. Стресс-тест подтвердил: работает корректно (нет deadlock/race), но сериализует все операции.
  2. Нет DLQ — сообщения после maxReceiveCount не перемещаются. Для production — must-have.
  3. Long Polling наивный — polling каждые 100ms. При 20 клиентах = 200 poll/sec на пустую очередь.
  4. Нет rate limiting — один тенант может degradировать сервис для остальных.
  5. Single pod — replicas > 1 не работает из-за глобального мьютекса (два пода = два state).
  6. Нет метрик — Prometheus exporter отсутствует.
  7. 100KB сообщения — 2/116 flaky в hardcore_test (TLS/nginx buffer, не баг сервера).

Architecture

SQS-service/
├── app/
│   ├── cmd/main.go              — точка входа
│   ├── models/model.go          — Queue, Message, Tenant структуры
│   ├── gosqs/*.go               — реализация SQS API операций
│   ├── admin/admin.go           — Admin API (Create/List/Get Tenant)
│   ├── tenant/tenant.go         — Multi-tenant изоляция
│   ├── auth/auth.go             — AWS Signature V4 верификация
│   ├── persistence/redis.go     — Redis adapter для persistence
│   ├── router/router.go         — HTTP маршруты
│   └── ui/index.html            — Web Console
├── deployments/k8s/             — Kubernetes манифесты
├── tests/                       — E2E тесты
└── doc/                         — Документация

Technology Stack

  • Language: Go 1.22
  • HTTP Server: Go std net/http
  • Auth: AWS Signature V4
  • Storage: Redis (write-through)
  • Container: Docker
  • Orchestration: Kubernetes
  • DNS: Ingress с TLS

Demo Credentials (read-only для тестирования)

Access Key: SSAK-demo-shared-sqs
Secret Key: demo-secret-key-shared-sqs-ngcloud-2026
Endpoint: https://qu.kube5s.ru

Deployment

# Kubernetes
kubectl apply -k deployments/k8s/

# Docker (local)
docker run -p 9090:9090 naeel/shared-sqs:v0.1.14

Last updated: 2026-04-10