hackathon-tower-2025

0

Описание

Языки

  • Python77,6%
  • JavaScript16,3%
  • HTML6,1%
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md

Система мониторинга и оптимизации PostgreSQL с AI

Когда работаешь с PostgreSQL в продакшене, постоянно возникает вопрос: "А что если нагрузка изменится? Как быстро система адаптируется?" Эта система — попытка ответить на этот вопрос автоматически.

Что это такое

Представь, что у тебя есть умный помощник, который:

  • Смотрит на метрики PostgreSQL в реальном времени
  • Понимает, какой тип нагрузки сейчас идет (OLTP, OLAP, смешанная и т.д.)
  • Автоматически подкручивает настройки для максимальной производительности
  • Показывает все это в удобном веб-интерфейсе

И все это работает без твоего участия. Просто запустил и забыл.

Ключевые фичи

1. AI-классификатор профилей нагрузки

Система умеет определять, что происходит с базой прямо сейчас. Это не просто "много запросов" или "мало запросов" — она различает 9 разных профилей:

  • Classical OLTP — классические транзакции, как в банковских системах
  • OLAP Analytics — тяжелые аналитические запросы (выборки и агрегации)
  • HTAP Hybrid — смешанная нагрузка (и транзакции, и аналитика одновременно)
  • High-Concurrency OLTP — очень много параллельных сессий (например, микросервисы или HFT)
  • Streaming IoT — постоянная потоковая запись данных от большого количества устройств
  • Read-Heavy Catalog — преимущественно чтение, каталоги и справочники
  • Batch ETL — ночные массовые загрузки и обновления данных
  • Queue-Driven — профили с большим числом блокировок, характерно для очередей и event sourcing
  • Replication-Sensitive — нагрузка с учетом задержек репликации, как в банке или PCI DSS системах

Как это работает? Нейросеть анализирует метрики (TPS, активные сессии, I/O wait, блокировки) и выдает профиль с вероятностями. Точность — больше 95%.

Точность классификатора График показывает, как модель училась распознавать профили. Видно, что точность стабильно растет и достигает 95%+

Матрица ошибок Матрица показывает, насколько хорошо модель различает разные профили. Чем темнее диагональ — тем лучше

F1-score по классам Для каждого профиля видно, насколько точно модель его определяет. Все значения выше 90%

2. Reinforcement Learning оптимизатор

Это самая интересная часть. Система не просто наблюдает — она действует. Используя Deep Q-Network (DQN), она учится оптимизировать параметры PostgreSQL:

  • shared_buffers
    — размер буферного кэша
  • work_mem
    — память для операций сортировки
  • maintenance_work_mem
    — память для обслуживания
  • effective_cache_size
    — оценка доступного кэша ОС
  • random_page_cost
    — стоимость случайного доступа к диску
  • effective_io_concurrency
    — параллельность I/O операций

Каждые 10 секунд система смотрит на метрики, принимает решение (увеличить/уменьшить параметр) и смотрит на результат. Со временем она учится делать это лучше.

Обучение RL модели Как менялись параметры PostgreSQL во время обучения. Видно, что система экспериментирует и находит оптимальные значения

3. Веб-интерфейс в реальном времени

Вместо того чтобы постоянно лазить в консоль и смотреть логи, все отображается в браузере. Графики обновляются каждые 5 секунд через WebSocket, так что задержек практически нет.

Что видно:

  • Все ключевые метрики (TPS, сессии, I/O wait, блокировки, cache hit ratio)
  • Текущий профиль нагрузки с вероятностями
  • Рекомендации RL оптимизатора
  • Интерактивные графики всех метрик
  • Управление генератором нагрузки

4. Генератор нагрузки

Чтобы система могла учиться и тестироваться, нужна нагрузка. Встроенный генератор позволяет запускать 9 профилей нагрузки, соответствующих реальным сценариям:

  • Classical OLTP — классические транзакционные системы (банки, ERP). Короткие запросы, умеренное число однотипных транзакций.
  • OLAP Analytics — тяжелые аналитические запросы: большие выборки, агрегации, сложные джоины. Мало транзакций, но каждый запрос "тяжелый".
  • HTAP Hybrid — смешанная нагрузка: одновременно выполняются и быстро транзакционные, и аналитические запросы.
  • High-Concurrency OLTP — очень много параллельных сессий (например, микросервисы, HFT), высокий TPS, высокая конкуренция за ресурсы.
  • Streaming IoT — постоянный поток INSERT/UPDATE от большого числа устройств, часто с низкой латентностью, иногда с пиками поступления данных.
  • Read-Heavy Catalog — преобладающее чтение данных (SELECT), как в каталогах, справочниках и CMS-системах.
  • Batch ETL — ночные массовые загрузки и обновления; короткое время, но очень интенсивная запись и обновление больших объемов.
  • Queue-Driven — нагрузка, связанная с очередями и event sourcing: высокая конкуренция, много блокировок, частые короткие транзакции на изменение состояния.
  • Replication-Sensitive — приложения, критичные к задержкам репликации (например, банки, PCI DSS): умеренные транзакции, но повышенное внимание к отставанию реплик и размеру WAL.

Можно запускать каждый профиль отдельно или включить режим случайного переключения профилей (каждые 1-3 минуты) — это удобно для обучения RL-агента и проверки классификатора.

5. Обучение и визуализация

Система генерирует кучу графиков, которые помогают понять, что происходит:

Потери при обучении Как уменьшались потери (loss) во время обучения классификатора

F1-score при обучении F1-score — ключевая метрика для классификации. Видно, что модель стабильно улучшается

Precision и Recall Для каждого профиля видно, насколько точно модель его находит (precision) и насколько полно (recall)

Распределение предсказаний Сколько правильных и неправильных предсказаний делает модель

Быстрый старт

Самый простой способ — запустить все одной командой:

Откроется браузер с веб-интерфейсом на http://localhost:5000. Система автоматически:

  • Запустит генератор случайной нагрузки
  • Начнет собирать метрики
  • Классифицировать профили
  • Оптимизировать параметры PostgreSQL

Все в реальном времени, без дополнительной настройки.

Что нужно для работы

  • Python 3.8+
  • PostgreSQL 12+ (можно использовать симуляцию, без реальной БД)
  • 4GB RAM (8GB лучше)
  • 10GB свободного места (если генерировать тестовую БД)

Структура проекта

├── backend/ # Веб-сервер и логика │ ├── app.py # Flask сервер с WebSocket │ ├── metrics_simulator.py # Симулятор метрик (если нет реальной БД) │ └── load_generator.py # Генератор нагрузки │ ├── frontend/ # Веб-интерфейс │ ├── templates/index.html │ └── static/js/app.js │ ├── classificator/ # AI классификатор │ ├── train_for_simulator.py # Обучение модели │ ├── predict.py # Предсказание профилей │ └── charts/ # Графики анализа │ ├── reinforcement/ # RL оптимизатор │ ├── rl_optimizer.py # DQN модель │ └── training_plots/ # Графики обучения RL │ ├── images/ # Графики обучения классификатора └── train_rl_agent.py # Скрипт обучения RL модели

Обучение моделей

Классификатор

Если хочешь переобучить классификатор на своих данных:

Модель сохранится в

classificator/final_model.keras
, а графики обучения — в
images/
.

RL оптимизатор

Обучение RL модели занимает больше времени, но это того стоит:

Во время обучения система будет экспериментировать с параметрами PostgreSQL, поэтому используй только на тестовой системе! Графики обучения сохранятся в

reinforcement/training_plots/
.

Как это работает под капотом

  1. Сбор метрик: Каждые 5 секунд система собирает метрики из PostgreSQL (или симулирует их, если БД нет)

  2. Классификация: Нейросеть анализирует метрики и определяет профиль нагрузки. Результат — профиль + вероятности для каждого класса

  3. Оптимизация: RL модель смотрит на текущее состояние (метрики + параметры) и решает, что изменить. Действие выполняется, через 10 секунд смотрим на результат и обновляем модель

  4. Визуализация: Все это отправляется через WebSocket в браузер и отображается в реальном времени

Важные замечания

⚠️ RL оптимизатор изменяет настройки PostgreSQL! Используй только на тестовой системе.

⚠️ Генератор нагрузки может сильно нагружать систему. Если видишь, что все тормозит, останови генератор.

⚠️ Генерация тестовой БД занимает время. Если запускаешь

generate_bd.py
, будь готов подождать 20-60 минут.

Что дальше

Система уже работает и готова к использованию. Можно:

  • Запустить и посмотреть, как она работает
  • Переобучить модели на своих данных
  • Добавить новые профили нагрузки
  • Расширить список оптимизируемых параметров
  • Интегрировать с реальной системой мониторинга

Технологии

  • Backend: Flask, Flask-SocketIO
  • Frontend: Bootstrap 5, Chart.js, Socket.IO
  • AI/ML: TensorFlow/Keras, scikit-learn
  • RL: Deep Q-Network (DQN)
  • БД: PostgreSQL

Лицензия

Проект создан для Hackathon VTB x Tower 2025.


Готово к использованию! Запусти

python start_all_systems.py
и посмотри, как система сама оптимизирует PostgreSQL. 🚀