README: детальная схема пайплайна, описание каждого сервиса
This commit is contained in:
+35
-10
@@ -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-приложений.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
|
||||
Reference in New Issue
Block a user