Files

3.7 KiB
Raw Permalink Blame History

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 телеметрии — приемлемо.