- app/auth/jwt.go: ParseJWTClaims, TenantIDFromSub (sless-compatible SHA256), PingNubesAPI - app/admin/admin.go: POST /ui/api/auth endpoint, jwtMiddleware for /ui/api/* - app/tenant/tenant_store.go: NubesSub/Email fields, GetBySub, CreateFromJWT - app/ui/index.html: login page, email in navbar, JWT session in localStorage - deployments/k8s/deployment.yaml: v0.1.16, NUBES_ENDPOINT env - doc/decisions/resource-limits-plan.md: 20 vulnerabilities audit - Fix: /ui/api/auth moved to subrouter (gorilla/mux PathPrefix conflict)
3.6 KiB
3.6 KiB
SQS-service Progress
Версага v0.1.x
v0.1.14 (2026-04-10) ✅
- ✅ Фикс критического дедлока в
create_queue.go(deadlock после первого CreateQueue) - ✅ Фикс UI:
m.sent→m.sent_at(даты сообщений всегда показывали dash) - ✅ Redis write-through persistence запущен
- ✅ TLS Ingress:
qu.kube5s.ru→185.247.187.151 - ✅ Нагрузочный тест Harbor: 4757 запросов, 99% успех, p95=332ms
- Status: Production-ready для демо, готов к выводу за скобки в отдельный репо
Next Steps
- Собрать Docker образ v0.1.15, задеплоить, проверить JWT auth flow
- Resource limits (Фаза 1-4 из doc/decisions/resource-limits-plan.md)
- Migration guide: как обновить сервис на v0.1.15
- Load testing shared-sqs (текущая реализация имеет глобальный мьютекс)
- DLQ (Dead Letter Queue) поддержка
- Long Polling оптимизация
- Rate limiting per tenant
v0.1.15 (2026-04-10) — IN PROGRESS
- ✅ 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
- Глобальный мьютекс — SyncQueues.Lock() на весь сервис. Performance bottleneck.
- Нет DLQ — failed messages теряются
- Long Polling naïve — polling каждую 100ms вместо push-based
- Нет rate limiting — один тенант может забить всех
- Single pod — нет горизонтального масштабирования
- Нет метрик — Prometheus экспортер отсутствует
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