Files

60 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-04-12 — GitHub Copilot (Claude Opus 4.6)
## Задача
Пользователь просит:
1. Просмотреть всё в репе IoT
2. Оценить замену Kafka и RabbitMQ на собственный SQS-service (из ~/terra/SQS-service)
3. Контекст: проект переехал из ~/terra/sless в отдельную репу ~/remote_dev/IoT
## План
1. Изучить текущую структуру IoT репы — что есть, как используется Kafka
2. Посмотреть SQS-service — что он из себя представляет
3. Посмотреть старую репу sless — что оттуда переехало, что осталось
4. Дать краткую оценку замены Kafka/RabbitMQ → SQS
## Ход работы
### Анализ: что нашёл
**IoT — текущее использование Kafka:**
- `cmd/mqtt-bridge/main.go` — MQTT → Kafka writer (топик `iot.telemetry`, библиотека `segmentio/kafka-go`)
- `cmd/kafka-consumer/main.go` — Kafka reader → Postgres (consumer group `iot-pg-consumer`)
- `internal/api/handler/iot_admin_stats_handler.go` — admin UI: показывает Kafka consumer lag
- `cmd/iot-operator/main.go` — передаёт KAFKA_BROKERS в handler
- `deployments/k8s/kafka.yaml` — деплоймент Kafka в кластере
- В документации (deployment.md, iot-mvp-plan.md) упоминается RabbitMQ как изначальный план, но в коде **RabbitMQ нет** — в реальности уже Kafka
**SQS-service (shared-sqs):**
- AWS SQS-совместимый сервис на Go (модуль `shared-sqs`)
- HTTP API с SQS-протоколом: CreateQueue, SendMessage, ReceiveMessage, DeleteMessage и т.д.
- Multi-tenant: TenantStore с auth
- Persistence: Redis (write-through) + in-memory
- Billing через PostgreSQL
- Порт 4100, gorilla/mux
- **Не Kafka-совместимый** — это pull-based очередь (SQS-like), не streaming platform
**RabbitMQ в IoT:** только в документах (plan). В коде не используется.
**shared-SQS (из Gitea README):**
- AWS SQS-совместимый managed сервис — 17 операций SQS
- Уже задеплоен: endpoint `https://qu.kube5s.ru`, Web UI `https://qu.kube5s.ru/ui/`
- Multi-tenant с auth (JWT nubes → auto-create tenant → Access Key / Secret Key)
- Можно использовать через стандартные AWS SDK (Go, Python boto3, Node.js @aws-sdk/client-sqs)
- Persistence: Redis + in-memory
- Billing: PostgreSQL
- Benchmark: конкурентоспособен с Yandex MQ
### Выводы по замене Kafka → shared-SQS
**Что реально нужно сделать в IoT:**
1. `mqtt-bridge`: заменить `kafka.Writer` → AWS SDK SQS `SendMessage` (endpoint = qu.kube5s.ru или внутрикластерный)
2. `kafka-consumer` → переименовать в `sqs-consumer`: заменить `kafka.Reader` → SQS `ReceiveMessage` + `DeleteMessage` polling loop
3. `admin stats handler`: вместо Kafka lag → SQS `GetQueueAttributes` (ApproximateNumberOfMessages)
4. Удалить `deployments/k8s/kafka.yaml`
5. Убрать `segmentio/kafka-go` из go.mod, добавить `aws-sdk-go-v2`
6. Обновить env vars: KAFKA_BROKERS → SQS_ENDPOINT + SQS credentials
7. Обновить документацию
**Плюс:** AWS SDK for Go — стандартная библиотека, код станет проще. shared-SQS уже живой.
**Минус:** polling latency (ReceiveMessage WaitTimeSeconds до 20s) vs Kafka push. Для IoT телеметрии — приемлемо.