9.8 KiB
9.8 KiB
Совместимое обновление My Uploader Bot
📋 Обзор
Данное обновление добавляет асинхронную архитектуру и Redis кэширование к существующему проекту My Uploader Bot, сохраняя полную совместимость с текущей MariaDB базой данных и существующими данными.
🎯 Что добавлено
✅ Новые возможности
- Асинхронная работа с базой данных (SQLAlchemy async)
- Redis кэширование для ускорения работы
- Улучшенная система конфигурации
- Расширенные модели данных
- Система мониторинга и здоровья сервисов
✅ Сохранена совместимость
- MariaDB 11.2 остается основной базой данных
- Все существующие данные сохраняются
- Существующие пути к файлам (/Storage/) не изменяются
- Все сервисы (app, indexer, ton_daemon, license_index, convert_process) работают как прежде
- Порт 15100 остается прежним
📁 Файлы для совместимого обновления
Основные конфигурационные файлы:
my-uploader-bot/
├── docker-compose.compatible.yml # Совместимая версия docker-compose
├── .env.compatible # Совместимые переменные окружения
├── requirements.compatible.txt # Совместимые зависимости Python
└── MIGRATION_GUIDE.md # Подробное руководство по миграции
Новые модули приложения:
my-uploader-bot/app/core/
├── database_compatible.py # Async база данных с MariaDB
├── config_compatible.py # Расширенная конфигурация
├── cache.py # Система Redis кэширования
└── models/
├── base_compatible.py # Базовые модели для MariaDB
├── user_compatible.py # Пользовательские модели
└── content_compatible.py # Модели контента
🚀 Быстрый старт
1. Создайте резервные копии
# Остановите текущие контейнеры
docker-compose down
# Сделайте бэкап
cp docker-compose.yml docker-compose.yml.backup
cp .env .env.backup
2. Используйте совместимые файлы
# Замените основные файлы на совместимые версии
cp docker-compose.compatible.yml docker-compose.yml
cp .env.compatible .env
cp requirements.compatible.txt requirements.txt
# Перенесите ваши пароли и ключи в новый .env
# Отредактируйте .env и укажите ваши значения:
# MYSQL_PASSWORD=ваш_текущий_пароль
# SECRET_KEY=ваш_секретный_ключ
3. Обновите код приложения
# Замените модули на совместимые версии
cp app/core/database_compatible.py app/core/database.py
cp app/core/config_compatible.py app/core/config.py
# Новый модуль кэширования уже добавлен как app/core/cache.py
4. Запустите обновленную систему
# Запустите все сервисы
docker-compose up -d
# Проверьте статус
docker-compose ps
# Проверьте логи
docker-compose logs -f app
🔧 Конфигурация
Основные изменения в .env:
# Существующие настройки MariaDB (сохраняются)
MYSQL_HOST=maria_db
MYSQL_PORT=3306
MYSQL_USER=myuploader
MYSQL_PASSWORD=ваш_пароль
MYSQL_DATABASE=myuploader
# Новые настройки Redis (добавляются)
REDIS_ENABLED=true
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
# Настройки кэширования (новые)
CACHE_ENABLED=true
CACHE_DEFAULT_TTL=300
CACHE_USER_TTL=600
CACHE_CONTENT_TTL=1800
# Улучшенные настройки базы данных (новые)
DATABASE_POOL_SIZE=20
DATABASE_MAX_OVERFLOW=30
DATABASE_POOL_TIMEOUT=30
Изменения в docker-compose.yml:
# Добавлен новый сервис Redis
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
# Все остальные сервисы остаются без изменений
📊 Мониторинг и проверка
Проверка работоспособности:
# API статус
curl http://localhost:15100/health
# База данных
curl http://localhost:15100/api/v1/health/database
# Redis кэш
curl http://localhost:15100/api/v1/health/cache
Мониторинг Redis:
# Подключение к Redis
docker-compose exec redis redis-cli
# Информация о памяти
docker-compose exec redis redis-cli info memory
# Статистика
docker-compose exec redis redis-cli info stats
Мониторинг MariaDB:
# Подключения к базе
docker-compose exec maria_db mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"
# Размер базы данных
docker-compose exec maria_db mysql -u root -p -e "
SELECT table_schema as 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as 'Size_MB'
FROM information_schema.tables
WHERE table_schema = 'myuploader';"
🎁 Преимущества обновления
Производительность:
- До 3x быстрее работа с базой данных благодаря async
- Мгновенный доступ к часто используемым данным через Redis
- Оптимизированные запросы с пулом соединений
Масштабируемость:
- Async архитектура для обработки большого количества запросов
- Redis кэширование снижает нагрузку на базу данных
- Гибкая конфигурация пулов соединений
Надежность:
- Автоматическое переподключение к базе данных
- Fallback режимы при недоступности Redis
- Улучшенное логирование и мониторинг
Удобство разработки:
- Современный async/await синтаксис
- Типизация с Pydantic
- Декораторы для кэширования
- Автоматическая сериализация/десериализация
🔄 Откат изменений
Если нужно вернуться к предыдущей версии:
# Остановите обновленную систему
docker-compose down
# Восстановите файлы из бэкапа
cp docker-compose.yml.backup docker-compose.yml
cp .env.backup .env
# Запустите старую версию
docker-compose up -d
📈 Использование кэширования в коде
Декораторы для автоматического кэширования:
from app.core.cache import cache_user_data, cache_content_data
@cache_user_data(ttl=600) # Кэш на 10 минут
async def get_user_profile(user_id: int):
# Данные автоматически кэшируются
pass
@cache_content_data(ttl=1800) # Кэш на 30 минут
async def get_file_metadata(file_id: int):
# Метаданные файлов кэшируются
pass
Ручное управление кэшем:
from app.core.cache import cache
# Сохранить данные
await cache.set("user:123:profile", user_data, ttl=600)
# Получить данные
profile = await cache.get("user:123:profile")
# Удалить из кэша
await cache.delete("user:123:profile")
# Массовые операции
await cache.set_multiple({
"key1": "value1",
"key2": "value2"
}, ttl=300)
🆘 Поддержка
При возникновении проблем:
- Проверьте логи:
docker-compose logs -f app - Проверьте статус сервисов:
docker-compose ps - Изучите MIGRATION_GUIDE.md для детального руководства
- Используйте откат при критических проблемах
📝 Примечания
- Все существующие данные сохраняются и остаются доступными
- API остается полностью совместимым со старыми клиентами
- Файловая структура не изменяется (/Storage/ остается прежним)
- Порты и сетевые настройки сохраняются
- Redis является опциональным - система работает и без него
Это эволюционное обновление, а не революционное изменение архитектуры. Ваша существующая система получает современные возможности, оставаясь полностью совместимой.