doc: обновлена документация — дополнения к архитектуре, деплою, прогрессу

- architecture/overview.md: добавлена актуальная схема (SQS, managed PG)
- deployment.md: добавлена процедура деплоя в iot-naeel
- progress.md: добавлен блок 2026-04-12 (Kafka→SQS, деплой)
- api/endpoints.md: добавлен актуальный формат /iot-admin/stats
- thinking/2026-04-12.md: дописан ход реализации и деплоя
- copilot-instructions.md: добавлено правило «документацию не стирать»

Старая документация (Kafka, RabbitMQ) сохранена как база знаний.
This commit is contained in:
Naeel
2026-04-12 16:16:46 +03:00
parent 150146edba
commit d4f7c5abc8
6 changed files with 332 additions and 0 deletions
+50
View File
@@ -35,3 +35,53 @@
- [ ] Деплой в кластер
- [ ] E2E тест: создание устройства → MQTT → Kafka → Postgres → API
- [ ] Убрать IoT-код из sless (опционально, после подтверждения что всё работает)
---
## 2026-04-12: Замена Kafka → shared-SQS + деплой в новый кластер
### Выполнено
- [x] Создана ветка `feature/replace-kafka-with-sqs`
- [x] Документировано решение: `doc/decisions/2026-04-12-replace-kafka-with-sqs.md`
- [x] **mqtt-bridge** (`cmd/mqtt-bridge/main.go`): Kafka Writer → AWS SDK SQS SendMessage
- [x] **sqs-consumer** (`cmd/sqs-consumer/main.go`): новый — заменяет kafka-consumer, SQS ReceiveMessage → Postgres
- [x] **kafka-consumer** (`cmd/kafka-consumer/`): удалён из кода
- [x] **admin stats** (`internal/api/handler/iot_admin_stats_handler.go`): Kafka lag → SQS GetQueueAttributes
- [x] **handler.go**: убрано поле KafkaBrokers
- [x] **iot-operator/main.go**: убрана передача KAFKA_BROKERS
- [x] go.mod: убран `segmentio/kafka-go`, добавлен `aws-sdk-go-v2` (v1.41.5 + sqs v1.42.25)
- [x] Dockerfile: kafka-consumer → sqs-consumer
- [x] Makefile: build-consumer → sqs-consumer
- [x] .gitignore: исправлен баг (паттерны без `/` игнорировали `cmd/` директории)
- [x] `go build ./...` проходит на ВМ
- [x] Коммит и пуш в ветку
### Деплой в кластер iot-naeel (новый кластер)
- [x] shared-SQS: создан tenant `iot-service` (t-96afe7e9f781f6ca), очередь `iot-telemetry`
- [x] Namespace `sless` создан
- [x] Secret `iot-sqs-credentials` создан
- [x] Secret `iot-bridge-credentials` создан
- [x] Postgres: переключён на managed PG17 (тот же что SQS billing)
- [x] Secret `iot-postgres-secret` создан (DSN → managed PG)
- [x] Docker: собран и запушен `naeel/iot-operator:v0.2.0` в Docker Hub
- [x] Deployment YAML: обновлены image на Docker Hub, убраны imagePullSecrets
- [x] EMQX: задеплоен (emqx.yaml + emqx-ws-ingress.yaml, адаптирован из sless)
- [x] iot-operator: задеплоен (новый iot-operator.yaml с RBAC)
- [x] CRD `iotdevices.iot.kube5s.ru` установлен
- [x] iot-mqtt-bridge: задеплоен, Running
- [x] iot-sqs-consumer: задеплоен, Running — подключился к PG и SQS
- [x] cert-manager: выпускает TLS для iot.kube5s.ru
- [x] Коммит и пуш
### Что работает
- Все 4 пода Running 1/1
- iot-operator: controller стартовал, MQTT auth/acl обрабатывает запросы от EMQX
- sqs-consumer: подключился к Postgres и SQS, polling loop запущен
- mqtt-bridge: подключён к EMQX и SQS, SQS queue resolved
- EMQX: MQTT :1883, WS :8083, dashboard :18083
### Следующие шаги
- [ ] E2E тест: создание устройства → MQTT → SQS → Postgres → API
- [ ] Нагрузочный тест
- [ ] Мерж ветки в master
- [ ] Убрать IoT-код из sless (опционально)