https://github.com/w-y-l-t/nhlinforamtionsystem
The system simulates, stores, and analyzes NHL data: information about teams, players, matches, trophies, tickets, and users.
https://github.com/w-y-l-t/nhlinforamtionsystem
asp-net-core dotnet etcd flyway grafana haproxy k6 patroni postgresql prometheus python
Last synced: 4 months ago
JSON representation
The system simulates, stores, and analyzes NHL data: information about teams, players, matches, trophies, tickets, and users.
- Host: GitHub
- URL: https://github.com/w-y-l-t/nhlinforamtionsystem
- Owner: W-y-l-t
- Created: 2025-05-27T20:36:24.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-05-27T20:59:28.000Z (5 months ago)
- Last Synced: 2025-06-15T05:04:36.995Z (4 months ago)
- Topics: asp-net-core, dotnet, etcd, flyway, grafana, haproxy, k6, patroni, postgresql, prometheus, python
- Language: C#
- Homepage:
- Size: 42 KB
- Stars: 8
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Информационная система для НХЛ
Учебный проект, демонстрирующий полный цикл разработки: от проектирования схемы до развёртывания и администрирования. Система хранит и анализирует данные НХЛ: информацию о командах, игроках, матчах, трофеях, билетах и пользователях.
Реализована полноценная 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`) выполняется следующая последовательность действий:
1. Поднимается кластер etcd.
2. Запускаются узлы Patroni с PostgreSQL и выбирается мастер.
3. HAProxy балансирует запросы, определяя текущего мастера и реплики.
4. Flyway применяет миграции до актуальной версии схемы.
5. Python + Faker генерируют и заполняют базу данных тестовыми данными.
6. Создаётся роль analytic и пользователи-аналитики из переменной окружения.
7. Поднимается ASP.NET Core backend-сервис.
8. Запускается Prometheus и Grafana для мониторинга.
9. При активации профиля `benchmark` выполняется нагрузочное тестирование через k6, результаты мониторинга отправляются в Prometheus.
10. Cron-задача регулярно создаёт резервные копии.## Развёртывание проекта
Создайте и настройте файлы `.env` и `patroni.env`, руководствуясь соответствующими .example версиями из репозитория.
Для запуска проекта с мониторингом и нагрузочным тестированим используйте:
```bash
docker-compose up -d --profile benchmark
```## Мониторинг
* **Prometheus**: [http://localhost:9090](http://localhost:9090)
* **Grafana**: [http://localhost:3000](http://localhost:3000) (логин/пароль: admin/admin)
* **HAProxy stats**: [http://localhost:7000](http://localhost:7000)
* **NhlBackend**: [http://localhost:5888](http://localhost:5888)### Дашборды Grafana
Готовые дашборды находятся в папке:
```
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 для имитации работы сервиса
```