An open API service indexing awesome lists of open source software.

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.

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 для имитации работы сервиса
```