README: детальная схема пайплайна, описание каждого сервиса

This commit is contained in:
2026-07-22 10:26:24 +04:00
parent ce7d031068
commit 182f670b34
+35 -10
View File
@@ -2,20 +2,45 @@
Демо-стенд «Умный дом»: 6 сервисов Nubes Cloud, развёртывание через Terraform.
## Архитектура
## Пайплайн данных
Эмуляция IoT-датчиков «Умного дома»: температура, влажность, энергопотребление.
```
Producer (Node.js) → RabbitMQ → Consumer (Node.js) → Redis + MongoDB → Dashboard (Node.js + Chart.js)
┌──────────┐ AMQP ┌──────────┐ AMQP ┌──────────┐
│ Producer │ ──────────→ │ RabbitMQ │ ──────────→ │ Consumer │
│ Node.js │ iot-events │ (очередь)│ iot-events │ Node.js │
└──────────┘ └──────────┘ └────┬─────┘
┌────────────────────────┼────────────────────────┐
│ запись │ запись │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Redis │ │ MongoDB │ │ Redis │
│ latest │ │ архив │ │ counters │
│ recent │ │ (7 дн.) │ │ │
└────┬─────┘ └──────────┘ └────┬─────┘
│ │
│ ┌────────────────────────────────────┘
│ │ чтение
▼ ▼
┌──────────────┐
│ Dashboard │
│ Node.js + │
│ Chart.js │
└──────────────┘
```
| Сервис | Тип Nubes | Роль |
|---|---|---|
| `iot-rmq` | RabbitMQ | Очередь сообщений |
| `iot-rds` | Redis | Кэш дашборда |
| `iot-mgo` | MongoDB | Постоянный архив |
| `iot-prod` | Node.js (22) | Генератор IoT-событий |
| `iot-cons` | Node.js (22) | Обработчик очереди |
| `iot-dash` | Node.js (22) | Веб-дашборд |
| # | Сервис | Тип Nubes | Что делает |
|---|---|---|---|
| 1 | **Producer** | Node.js (22) | Генерирует случайные события от 8 датчиков (3 типа: температура °C, влажность %, энергопотребление kW). Раз в 3 секунды отправляет JSON-событие в очередь RabbitMQ `iot-events`. |
| 2 | **RabbitMQ** | RabbitMQ | Очередь сообщений AMQP. Держит события, пока Consumer не заберёт. `durable: true` — сообщения переживают рестарт брокера. |
| 3 | **Consumer** | Node.js (22) | Читает очередь RabbitMQ. Каждое событие пишет параллельно в Redis (оперативный кэш: последние значения + счётчики + лента) и MongoDB (постоянный архив с TTL 7 дней). |
| 4 | **Redis** | Redis | Кэш для Dashboard: `iot:latest` (hash — актуальные значения датчиков), `iot:counters` (hash — счётчики по типам), `iot:recent` (zset — лента 1000 событий). |
| 5 | **MongoDB** | MongoDB | Архив всех событий в коллекции `iot_events`. TTL-индекс на 7 дней — автоочистка. |
| 6 | **Dashboard** | Node.js (22) | Веб-интерфейс. Читает только Redis, отдаёт JSON-API и HTML с графиками Chart.js (bar chart значений, doughnut счётчиков, таблица событий). Автообновление каждые 3 сек. |
Все соединения между сервисами — внутренние, через K8s Service (`.svc.cluster.local`). Наружу торчат только HTTP-эндпоинты Node.js-приложений.
## Быстрый старт