Учебный проект, демонстрирующий полный цикл разработки: от проектирования схемы до развёртывания и администрирования. Система хранит и анализирует данные НХЛ: информацию о командах, игроках, матчах, трофеях, билетах и пользователях.
Реализована полноценная ER-диаграмма с учётом связей между сущностями (команды, игроки, матчи, статистика и т.д.). Проект выполнен в три этапа:
- Проектирование (моделирование данных и ER-диаграммы)
- Развёртывание (настройка кластера PostgreSQL с репликацией и Flyway-миграции)
- Администрирование (мониторинг через Prometheus/Grafana, резервное копирование, нагрузочное тестирование)
- Docker & Docker Compose – контейнеризация и оркестрация сервисов проекта для упрощения развёртывания инфраструктуры.
- PostgreSQL – реляционная СУБД для хранения данных.
- Patroni + etcd – автоматическая репликация PostgreSQL, обеспечивают high-availability базы данных.
- HAProxy – балансировка запросов к текущему мастеру PostgreSQL-кластера.
- Flyway – автоматические миграции базы данных, версионирование схемы.
- Python + Faker – генерация реалистичных тестовых данных.
- C# (.NET Core) – демонстрационный backend-сервис с REST API.
- Prometheus – сбор метрик с PostgreSQL, Patroni, HAProxy, .NET-сервиса и нагрузочного тестирования.
- Grafana – визуализация собранных метрик и состояния системы.
- k6 – нагрузочное тестирование backend-сервиса.
- Резервное копирование – регулярное создание дампов базы данных с очисткой старых копий.
При запуске проекта (docker-compose up -d
) выполняется следующая последовательность действий:
- Поднимается кластер etcd.
- Запускаются узлы Patroni с PostgreSQL и выбирается мастер.
- HAProxy балансирует запросы, определяя текущего мастера и реплики.
- Flyway применяет миграции до актуальной версии схемы.
- Python + Faker генерируют и заполняют базу данных тестовыми данными.
- Создаётся роль analytic и пользователи-аналитики из переменной окружения.
- Поднимается ASP.NET Core backend-сервис.
- Запускается Prometheus и Grafana для мониторинга.
- При активации профиля
benchmark
выполняется нагрузочное тестирование через k6, результаты мониторинга отправляются в Prometheus. - Cron-задача регулярно создаёт резервные копии.
Создайте и настройте файлы .env
и patroni.env
, руководствуясь соответствующими .example версиями из репозитория.
Для запуска проекта с мониторингом и нагрузочным тестированим используйте:
docker-compose up -d --profile benchmark
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (логин/пароль: admin/admin)
- HAProxy stats: http://localhost:7000
- NhlBackend: http://localhost:5888
Готовые дашборды находятся в папке:
monitor/grafana/dashboards/
- NHL Dashboard – основной дашборд с метриками производительности, запросов и состояния кластера.
Импортируйте JSON-файл дашборда в Grafana через интерфейс и начинайте мониторинг.
DESCRIPTION.MD # Функциональные требования и ERD
nhl-db/
├── migrations/ # Flyway-миграции
├── seed/ # Python-скрипты и Dockerfile для генерации данных
├── monitor/
│ ├── prometheus/ # Конфигурация Prometheus
│ └── grafana/ # Конфигурация Grafana и JSON-дашборды
├── scripts/init/ # Скрипты для создания ролей и пользователей
├── backup/ # Скрипт для резервного копирования базы данных
├── k6/ # Сценарии нагрузочного тестирования
├── docker-compose.yml # Основной Docker Compose-файл
├── .env.example # Шаблон файла переменных окружения
├── haproxy.cfg # Конфигурация haproxy
├── Dockerfile.haproxy
└── patroni.env.example # Шаблон файла переменных окружения для patroni
NhlBackend/ # REST API для имитации работы сервиса