README: детальная схема пайплайна, описание каждого сервиса
This commit is contained in:
+35
-10
@@ -2,20 +2,45 @@
|
|||||||
|
|
||||||
Демо-стенд «Умный дом»: 6 сервисов Nubes Cloud, развёртывание через Terraform.
|
Демо-стенд «Умный дом»: 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 | Роль |
|
| # | Сервис | Тип Nubes | Что делает |
|
||||||
|---|---|---|
|
|---|---|---|---|
|
||||||
| `iot-rmq` | RabbitMQ | Очередь сообщений |
|
| 1 | **Producer** | Node.js (22) | Генерирует случайные события от 8 датчиков (3 типа: температура °C, влажность %, энергопотребление kW). Раз в 3 секунды отправляет JSON-событие в очередь RabbitMQ `iot-events`. |
|
||||||
| `iot-rds` | Redis | Кэш дашборда |
|
| 2 | **RabbitMQ** | RabbitMQ | Очередь сообщений AMQP. Держит события, пока Consumer не заберёт. `durable: true` — сообщения переживают рестарт брокера. |
|
||||||
| `iot-mgo` | MongoDB | Постоянный архив |
|
| 3 | **Consumer** | Node.js (22) | Читает очередь RabbitMQ. Каждое событие пишет параллельно в Redis (оперативный кэш: последние значения + счётчики + лента) и MongoDB (постоянный архив с TTL 7 дней). |
|
||||||
| `iot-prod` | Node.js (22) | Генератор IoT-событий |
|
| 4 | **Redis** | Redis | Кэш для Dashboard: `iot:latest` (hash — актуальные значения датчиков), `iot:counters` (hash — счётчики по типам), `iot:recent` (zset — лента 1000 событий). |
|
||||||
| `iot-cons` | Node.js (22) | Обработчик очереди |
|
| 5 | **MongoDB** | MongoDB | Архив всех событий в коллекции `iot_events`. TTL-индекс на 7 дней — автоочистка. |
|
||||||
| `iot-dash` | Node.js (22) | Веб-дашборд |
|
| 6 | **Dashboard** | Node.js (22) | Веб-интерфейс. Читает только Redis, отдаёт JSON-API и HTML с графиками Chart.js (bar chart значений, doughnut счётчиков, таблица событий). Автообновление каждые 3 сек. |
|
||||||
|
|
||||||
|
Все соединения между сервисами — внутренние, через K8s Service (`.svc.cluster.local`). Наружу торчат только HTTP-эндпоинты Node.js-приложений.
|
||||||
|
|
||||||
## Быстрый старт
|
## Быстрый старт
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user