Архитектура
Содержание
Гибридная архитектура сочетает распределенное KV-хранилище для оперативных данных и Git-репозиторий как источник истины и средство восстановления.
Задачи #
- Распределенное хранение — информация о сущностях сети доступна из любого рабочего сегмента.
- Отказоустойчивость — сеть продолжает работать, пока доступна хотя бы одна Core-нода и одна Entry-нода.
- Сохранность при перестроении — полное восстановление сети с нуля из Git-репозитория даже после потери всей оперативной инфраструктуры.
- Автоматизация — программное управление всеми функциями сети через CLI или веб-интерфейс.
Ограничения #
| Параметр | Значение |
|---|---|
| Размер сети | Десятки — сотни узлов, в редких случаях до 1000 |
| KV-кластер | На начальном этапе — на Core-нодах |
| Root-нода | Может быть неактивна длительное время |
Доступ узлов к хранилищам #
| Узел | KV-кластер | Git-репозиторий |
|---|---|---|
| Root-нода | Чтение / запись | Чтение / запись |
| Core-нода | Чтение / запись (оперативные изменения) | Запись (синхронизация KV → Git) |
| Entry-нода | Только чтение | Нет доступа |
Подробнее о взаимодействии каждого типа узла с хранилищами — в разделе Узлы сети.
Рассмотренные альтернативы #
| Подход | Причина отклонения |
|---|---|
| Файловая система на каждом узле | Нет консистентности, сложная синхронизация, ненадежное восстановление |
| Реляционные БД (PostgreSQL) | Избыточность для KV-данных, сложность развертывания распределенного кластера |
| Облачные БД (DynamoDB и др.) | Зависимость от провайдера, риски конфиденциальности, стоимость |
Ни один подход в чистом виде не удовлетворяет всем требованиям — в первую очередь, по сохранности данных при полном перестроении сети. Это привело к выбору гибридной архитектуры.
Гибридный подход #
Функции хранения разделены на два слоя:
| Слой | Компонент | Назначение |
|---|---|---|
| Оперативный | KV-кластер (etcd) | Текущее состояние сети, быстрое чтение/запись, строгая консистентность |
| Долгосрочный | Git-репозиторий | Желаемое состояние, версионирование, аудит, восстановление с нуля |
graph TD
Git["Git-репозиторий
источник истины"] KV["KV-кластер
оперативные данные"] Root["Root-нода"] Core["Core-ноды"] Entry["Entry-ноды"] Git -->|"пуш / пулл"| Root Git -->|"пуш / пулл"| Core Root -->|"чтение / запись"| KV Core -->|"чтение / запись"| KV Entry -->|"чтение"| KV style Git fill:#374151,color:#fff,stroke:#1f2937 style KV fill:#374151,color:#fff,stroke:#1f2937 style Root fill:#7c3aed,color:#fff,stroke:#6d28d9 style Core fill:#1d4ed8,color:#fff,stroke:#1e40af style Entry fill:#0891b2,color:#fff,stroke:#0e7490
источник истины"] KV["KV-кластер
оперативные данные"] Root["Root-нода"] Core["Core-ноды"] Entry["Entry-ноды"] Git -->|"пуш / пулл"| Root Git -->|"пуш / пулл"| Core Root -->|"чтение / запись"| KV Core -->|"чтение / запись"| KV Entry -->|"чтение"| KV style Git fill:#374151,color:#fff,stroke:#1f2937 style KV fill:#374151,color:#fff,stroke:#1f2937 style Root fill:#7c3aed,color:#fff,stroke:#6d28d9 style Core fill:#1d4ed8,color:#fff,stroke:#1e40af style Entry fill:#0891b2,color:#fff,stroke:#0e7490
Ключевые принципы #
- Распределенность и отказоустойчивость — KV-кластер на Core-нодах обеспечивает устойчивость к отказу отдельных узлов.
- Иерархия управления — Root-нода сохраняет высший уровень контроля; оперативное управление делегировано Core-нодам.
- Автоматизация — API KV-хранилища позволяет полностью автоматизировать управление сетью.
- Сохранность данных — Git-репозиторий гарантирует восстановление сети даже после потери всех оперативных узлов.
- Консистентность — KV-хранилище обеспечивает строгую консистентность; синхронизация поддерживает согласованность между KV и Git.