uploader-bot/README_COMPATIBLE_UPDATE.md

271 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Совместимое обновление 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. Создайте резервные копии
```bash
# Остановите текущие контейнеры
docker-compose down
# Сделайте бэкап
cp docker-compose.yml docker-compose.yml.backup
cp .env .env.backup
```
### 2. Используйте совместимые файлы
```bash
# Замените основные файлы на совместимые версии
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. Обновите код приложения
```bash
# Замените модули на совместимые версии
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. Запустите обновленную систему
```bash
# Запустите все сервисы
docker-compose up -d
# Проверьте статус
docker-compose ps
# Проверьте логи
docker-compose logs -f app
```
## 🔧 Конфигурация
### Основные изменения в .env:
```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:
```yaml
# Добавлен новый сервис Redis
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
# Все остальные сервисы остаются без изменений
```
## 📊 Мониторинг и проверка
### Проверка работоспособности:
```bash
# API статус
curl http://localhost:15100/health
# База данных
curl http://localhost:15100/api/v1/health/database
# Redis кэш
curl http://localhost:15100/api/v1/health/cache
```
### Мониторинг Redis:
```bash
# Подключение к Redis
docker-compose exec redis redis-cli
# Информация о памяти
docker-compose exec redis redis-cli info memory
# Статистика
docker-compose exec redis redis-cli info stats
```
### Мониторинг MariaDB:
```bash
# Подключения к базе
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
- **Декораторы для кэширования**
- **Автоматическая сериализация/десериализация**
## 🔄 Откат изменений
Если нужно вернуться к предыдущей версии:
```bash
# Остановите обновленную систему
docker-compose down
# Восстановите файлы из бэкапа
cp docker-compose.yml.backup docker-compose.yml
cp .env.backup .env
# Запустите старую версию
docker-compose up -d
```
## 📈 Использование кэширования в коде
### Декораторы для автоматического кэширования:
```python
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
```
### Ручное управление кэшем:
```python
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)
```
## 🆘 Поддержка
При возникновении проблем:
1. **Проверьте логи**: `docker-compose logs -f app`
2. **Проверьте статус сервисов**: `docker-compose ps`
3. **Изучите MIGRATION_GUIDE.md** для детального руководства
4. **Используйте откат** при критических проблемах
## 📝 Примечания
- **Все существующие данные сохраняются** и остаются доступными
- **API остается полностью совместимым** со старыми клиентами
- **Файловая структура не изменяется** (/Storage/ остается прежним)
- **Порты и сетевые настройки сохраняются**
- **Redis является опциональным** - система работает и без него
Это **эволюционное обновление**, а не революционное изменение архитектуры. Ваша существующая система получает современные возможности, оставаясь полностью совместимой.