Архитектура системы ECCM (Eltex Cloud Config Manager)
ECCM — централизованная система мониторинга и управления сетевым оборудованием, реализованная в виде набора микросервисов, развёртываемых в Docker-контейнерах.
1. Архитектура системы
Архитектурный паттерн
Микросервисная архитектура на основе Docker-контейнеров. Межсервисная коммуникация: асинхронная через RabbitMQ (Pub-Sub, RPC) + синхронная через gRPC/Protobuf.
Функциональные компоненты системы
- Управление устройствами — добавление, группировка, конфигурирование (высокоуровневое: интерфейсы, VLAN, SNMP, VRF, зоны безопасности, профили, правила, доступ), шаблоны
- Мониторинг — SNMP-опрос, телеметрия, инвентаризация, дашборды, карты сети
- Обнаружение проблем (Fault Management) — регистрация событий (syslog, SNMP trap), корреляция, MIB, уведомления (email), проблемы устройств
- Обновление ПО — централизованное обновление firmware через TFTP/SFTP
- Web-терминал — SSH-доступ к устройствам через браузер
- Zero-Touch Provisioning (ZTP) — автоматическая начальная конфигурация устройств через DHCP
- Управление сетью — группы, дерево объектов, поиск, высокоуровневое конфигурирование (L2/L3, VxLAN, EVPN)
- Лицензирование — системные лицензии, лицензии для устройств
- Резервное копирование — бэкап базы данных
- Публичное API — REST API для интеграции со внешними системами
- Управление WLC — профили SSID, RADIUS, Portal, Airtune, WIDS, привязки, мониторинг точек доступа
- Управление MES — профили (общий, VLAN, Interface L2, Switchport, Storm Control), VxLAN, EVPN Multihoming, IP-фабрика
- Управление VSAT — MCPC/SCPC, MF-TDMA, мониторинг VSAT-устройств
- Управление кластерами — мониторинг и управление кластерными устройствами
Backend-микросервисы (Kotlin 2.1.21, Spring Boot 3.5, JDK 21)
| Сервис | Порт | Назначение |
backend-ui | 8081 | REST API, агрегация данных для фронтенда |
device-manager | 8083 | Управление устройствами, шаблоны, конфигурации |
monitoring-service | 8088 | SNMP-опрос, сбор телеметрии (горизонтально масштабируемый) |
data-presenter | 8089 | Агрегация и презентация данных (горизонтально масштабируемый) |
cron-manager | 8082 | Фоновые и периодические задачи |
problem-manager | 8099 | Корреляция событий, обнаружение проблем |
notification-service | 8100 | Уведомления по email и событиям |
delivery-manager | 8102 | Доставка конфигураций на устройства |
syslog-receiver | 514 (TCP/UDP) | Приём syslog-сообщений от устройств |
trap-receiver | 8098 (API), 162/UDP (trap) | Приём SNMP trap |
upgrader | 8084 | Обновление ПО устройств (TFTP :69/UDP, SFTP :2222/TCP) |
ztp-manager | 8095 | Zero-Touch Provisioning |
terminal-manager | 8097 | Web-терминал (SSH-сессии к устройствам) |
identity-provider | 9999 | Аутентификация, авторизация, RBAC, OAuth/OIDC |
license-service | 8103 | Лицензирование системы и функционала |
vsat-manager | 8105 | Управление VSAT-устройствами |
Инфраструктурные сервисы
| Сервис | Версия | Назначение |
| TimescaleDB | PostgreSQL 16.11 + TimescaleDB 2.24 | Основная база данных: реляционные данные + временные ряды (телеметрия). HA-режим: repmgr (failover) |
| Redis | 8.4.2 | Кэш, сессии пользователей. HA-режим: Sentinel |
| RabbitMQ | 4.2.4 | Message broker (AMQPS :5671). Межсервисная асинхронная коммуникация (Pub-Sub, RPC) |
| Nginx (ECCM Gateway) | 1.29.6 | API-шлюз, обратный прокси. Порты: 80/443 |
| Kea DHCP | — | DHCP-сервер для ZTP. Порт: 67/UDP |
| epg-service | — | Сервис лицензирования оборудования |
| keepalived + VRRP | — | Виртуальный IP для HA-режима (cluster) |
| Jaeger | 1.8.1 | Distributed tracing (опционально) |
Frontend (Web GUI)
- Angular 20.3.18, TypeScript 5.8.3, RxJS 7.5.5
- Node.js 20 (среда сборки)
- Cytoscape — визуализация сетевой топологии
- Monaco Editor — редактор конфигураций
- xterm — web-терминал SSH
Сетевая архитектура (Docker сети)
external — 172.20.0.0/20 — публичные сервисы (доступ к устройствам, API)internal — 172.21.0.0/20 — межсервисная коммуникация (изолированная)
Режимы работы
| Standalone | Однохостовое развёртывание. Один сервер со всеми сервисами |
| Cluster (HA) | Горячее резервирование из 3 узлов: master / slave / witness. PostgreSQL repmgr (синхронная репликация, failover), Redis Sentinel, RabbitMQ-кластер, keepalived + VRRP (виртуальный IP). TLS-шифрование межсервисной связи |
| Kubernetes | Развёртывание через Helm chart |
| Ansible | Автоматизированная установка через Ansible playbooks (online/offline, с резервированием и без) |
2. Используемое программное обеспечение
Backend
| Компонент | Технология | Версия |
| Язык | Kotlin | 2.1.21 |
| Фреймворк | Spring Boot | 3.5 |
| JDK | OpenJDK 21 | 21 |
| Система сборки | Gradle + Jib | — |
Frontend
| Компонент | Технология | Версия |
| Фреймворк | Angular | 20.3.18 |
| Язык | TypeScript | 5.8.3 |
| Среда выполнения | Node.js | 20 |
| Реактивная библиотека | RxJS | 7.5.5 |
Инфраструктура
| Компонент | Технология | Версия |
| База данных (реляционная + timeseries) | PostgreSQL + TimescaleDB | 16.11 + 2.24 |
| Кэш и сессии | Redis | 8.4.2 |
| Message broker | RabbitMQ | 4.2.4 |
| API-шлюз | Nginx | 1.29.6 |
| DHCP-сервер | Kea DHCP | — |
| Distributed tracing | Jaeger | 1.8.1 |
Среда развёртывания
| Компонент | Технология | Версия |
| Контейнеризация | Docker | 20.10+ |
| Оркестрация контейнеров | Docker Compose | v2.17+ |
| Kubernetes | Helm chart | — |
| Автоматизация установки | Ansible | — |
Поддерживаемые операционные системы
- Ubuntu 22/24
- RED OS 7 / 8
- AstraLinux 1.7.5
- ALT Linux
3. Предварительные условия и ограничения
Минимальные системные требования
| Параметр | Минимум | Рекомендуется |
| CPU | 4 ядра | 8+ ядер |
| RAM | 8 ГБ | 16–32 ГБ |
| Диск | — | Зависит от объёма телеметрии и числа устройств |
Программные требования
- Docker 20.10+ (AstraLinux: docker-compose-v2 ≥ 2.17.0)
- OpenJDK 21 — для сборки из исходных кодов
- Make — для сборки проекта
- curl, conntrack — для установки и работы conntrack-таблиц
Открытые порты
| Порт | Протокол | Сервис | Назначение |
| 80 | TCP | ECCM Gateway (Nginx) | HTTP-доступ к веб-интерфейсу и API |
| 443 | TCP | ECCM Gateway (Nginx) | HTTPS-доступ (флаг --https) |
| 162 | UDP | trap-receiver | Приём SNMP trap от устройств |
| 514 | TCP/UDP | syslog-receiver | Приём syslog-сообщений (порт настраиваемый) |
| 67 | UDP | Kea DHCP | DHCP-сервер для ZTP |
| 69 | UDP | upgrader | TFTP — загрузка firmware на устройства |
| 2222 | TCP | upgrader | SFTP — обновление ПО |
Сетевые требования
- Сервер должен иметь доступ к управляемым устройствам по протоколам: SSH, SNMP, TFTP/SFTP
- Две Docker-сети:
external (устройства/внешние сервисы) и internal (межсервисная коммуникация) - Для HA-режима требуется виртуальный IP (keepalived + VRRP)
Ограничения HA-режима (Cluster)
- Кластер состоит из 3 узлов: master, slave, witness
- Всё межсервисное общение в кластере шифруется TLS
- PostgreSQL: repmgr (синхронная репликация master ↔ slave, witness для quorum)
- Redis: Sentinel (failover при недоступности master)
- RabbitMQ: кластеризация с TLS (AMQPS)
- Необходимы TLS-сертификаты (кластерный сертификат + root CA)