3.7 KiB
3.7 KiB
2026-04-12 — GitHub Copilot (Claude Opus 4.6)
Задача
Пользователь просит:
- Просмотреть всё в репе IoT
- Оценить замену Kafka и RabbitMQ на собственный SQS-service (из ~/terra/SQS-service)
- Контекст: проект переехал из ~/terra/sless в отдельную репу ~/remote_dev/IoT
План
- Изучить текущую структуру IoT репы — что есть, как используется Kafka
- Посмотреть SQS-service — что он из себя представляет
- Посмотреть старую репу sless — что оттуда переехало, что осталось
- Дать краткую оценку замены 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 groupiot-pg-consumer)internal/api/handler/iot_admin_stats_handler.go— admin UI: показывает Kafka consumer lagcmd/iot-operator/main.go— передаёт KAFKA_BROKERS в handlerdeployments/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 UIhttps://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:
mqtt-bridge: заменитьkafka.Writer→ AWS SDK SQSSendMessage(endpoint = qu.kube5s.ru или внутрикластерный)kafka-consumer→ переименовать вsqs-consumer: заменитьkafka.Reader→ SQSReceiveMessage+DeleteMessagepolling loopadmin stats handler: вместо Kafka lag → SQSGetQueueAttributes(ApproximateNumberOfMessages)- Удалить
deployments/k8s/kafka.yaml - Убрать
segmentio/kafka-goиз go.mod, добавитьaws-sdk-go-v2 - Обновить env vars: KAFKA_BROKERS → SQS_ENDPOINT + SQS credentials
- Обновить документацию
Плюс: AWS SDK for Go — стандартная библиотека, код станет проще. shared-SQS уже живой. Минус: polling latency (ReceiveMessage WaitTimeSeconds до 20s) vs Kafka push. Для IoT телеметрии — приемлемо.