- Added methods to delete audio moderation records and retrieve all audio records in async_db.py. - Enhanced AudioRepository with functionality to delete audio records by file name and retrieve all audio message records. - Improved logging for audio record operations to enhance monitoring and debugging capabilities. - Updated related handlers to ensure proper integration of new audio management features.
172 lines
8.0 KiB
Markdown
172 lines
8.0 KiB
Markdown
# Решение проблемы Flood Control в Telegram Bot
|
||
|
||
## Проблема
|
||
|
||
В логах бота наблюдались ошибки типа:
|
||
```
|
||
Flood control exceeded on method 'SendVoice' in chat 1322897572. Retry in 3 seconds.
|
||
```
|
||
|
||
Эти ошибки возникают при превышении лимитов Telegram Bot API:
|
||
- Не более 30 сообщений в секунду от одного бота глобально
|
||
- Не более 1 сообщения в секунду в один чат
|
||
- Дополнительные ограничения для разных типов сообщений
|
||
|
||
## Решение
|
||
|
||
Реализована комплексная система rate limiting, включающая:
|
||
|
||
### 1. Основные компоненты
|
||
|
||
#### `rate_limiter.py`
|
||
- **ChatRateLimiter**: Ограничивает скорость отправки сообщений для конкретного чата
|
||
- **GlobalRateLimiter**: Глобальные ограничения для всех чатов
|
||
- **RetryHandler**: Обработка повторных попыток с экспоненциальной задержкой
|
||
- **TelegramRateLimiter**: Основной класс, объединяющий все компоненты
|
||
|
||
#### `rate_limit_monitor.py`
|
||
- **RateLimitMonitor**: Мониторинг и статистика rate limiting
|
||
- Отслеживание успешных/неудачных запросов
|
||
- Анализ ошибок и производительности
|
||
- Статистика по чатам
|
||
|
||
#### `rate_limit_config.py`
|
||
- Конфигурации для разных окружений (development, production, strict)
|
||
- Адаптивные настройки на основе уровня ошибок
|
||
- Настройки для разных типов сообщений
|
||
|
||
#### `rate_limit_middleware.py`
|
||
- Middleware для автоматического применения rate limiting
|
||
- Перехват всех исходящих сообщений
|
||
- Прозрачная интеграция с существующим кодом
|
||
|
||
### 2. Ключевые особенности
|
||
|
||
#### Rate Limiting
|
||
- **Настраиваемая скорость**: 0.5 сообщений в секунду на чат (по умолчанию)
|
||
- **Burst protection**: Максимум 2 сообщения подряд
|
||
- **Глобальные ограничения**: 10 сообщений в секунду глобально
|
||
- **Адаптивные задержки**: Увеличение задержек при ошибках
|
||
|
||
#### Retry Mechanism
|
||
- **Экспоненциальная задержка**: Увеличение времени ожидания при повторных попытках
|
||
- **Максимальные ограничения**: Ограничение максимального времени ожидания
|
||
- **Умная обработка ошибок**: Разные стратегии для разных типов ошибок
|
||
|
||
#### Мониторинг
|
||
- **Детальная статистика**: Отслеживание всех запросов и ошибок
|
||
- **Анализ производительности**: Процент успеха, время ожидания, активность
|
||
- **Административные команды**: `/ratelimit_stats`, `/ratelimit_errors`, `/reset_ratelimit_stats`
|
||
|
||
### 3. Интеграция
|
||
|
||
#### Обновленные функции
|
||
```python
|
||
# helper_func.py
|
||
async def send_voice_message(chat_id, message, voice, markup=None):
|
||
from .rate_limiter import send_with_rate_limit
|
||
|
||
async def _send_voice():
|
||
if markup is None:
|
||
return await message.bot.send_voice(chat_id=chat_id, voice=voice)
|
||
else:
|
||
return await message.bot.send_voice(chat_id=chat_id, voice=voice, reply_markup=markup)
|
||
|
||
return await send_with_rate_limit(_send_voice, chat_id)
|
||
```
|
||
|
||
#### Middleware
|
||
```python
|
||
# voice_handler.py
|
||
from helper_bot.middlewares.rate_limit_middleware import MessageSendMiddleware
|
||
|
||
def _setup_middleware(self):
|
||
self.router.message.middleware(DependenciesMiddleware())
|
||
self.router.message.middleware(BlacklistMiddleware())
|
||
self.router.message.middleware(MessageSendMiddleware()) # Новый middleware
|
||
```
|
||
|
||
### 4. Конфигурация
|
||
|
||
#### Production настройки (по умолчанию)
|
||
```python
|
||
PRODUCTION_CONFIG = RateLimitSettings(
|
||
messages_per_second=0.5, # 1 сообщение каждые 2 секунды
|
||
burst_limit=2, # Максимум 2 сообщения подряд
|
||
retry_after_multiplier=1.5,
|
||
max_retry_delay=30.0,
|
||
max_retries=3,
|
||
voice_message_delay=2.5, # Дополнительная задержка для голосовых
|
||
media_message_delay=2.0,
|
||
text_message_delay=1.5
|
||
)
|
||
```
|
||
|
||
#### Адаптивная конфигурация
|
||
Система автоматически ужесточает ограничения при высоком уровне ошибок:
|
||
- При >10% ошибок: уменьшение скорости в 2 раза
|
||
- При <1% ошибок: увеличение скорости на 20%
|
||
|
||
### 5. Мониторинг и администрирование
|
||
|
||
#### Команды для администраторов
|
||
- `/ratelimit_stats` - Показать статистику rate limiting
|
||
- `/ratelimit_errors` - Показать недавние ошибки
|
||
- `/reset_ratelimit_stats` - Сбросить статистику
|
||
|
||
#### Пример вывода статистики
|
||
```
|
||
📊 Статистика Rate Limiting
|
||
|
||
🔢 Общая статистика:
|
||
• Всего запросов: 1250
|
||
• Процент успеха: 98.4%
|
||
• Процент ошибок: 1.6%
|
||
• Запросов в минуту: 12.5
|
||
• Среднее время ожидания: 1.2с
|
||
• Активных чатов: 45
|
||
• Ошибок за час: 3
|
||
|
||
🔍 Детальная статистика:
|
||
• Успешных запросов: 1230
|
||
• Неудачных запросов: 20
|
||
• RetryAfter ошибок: 15
|
||
• Других ошибок: 5
|
||
```
|
||
|
||
### 6. Тестирование
|
||
|
||
Создан полный набор тестов в `test_rate_limiter.py`:
|
||
- Тесты всех компонентов
|
||
- Интеграционные тесты
|
||
- Тесты конфигурации
|
||
- Тесты мониторинга
|
||
|
||
Запуск тестов:
|
||
```bash
|
||
pytest tests/test_rate_limiter.py -v
|
||
```
|
||
|
||
### 7. Преимущества решения
|
||
|
||
1. **Предотвращение ошибок**: Автоматическое соблюдение лимитов API
|
||
2. **Прозрачность**: Минимальные изменения в существующем коде
|
||
3. **Мониторинг**: Полная видимость производительности
|
||
4. **Адаптивность**: Автоматическая настройка под нагрузку
|
||
5. **Надежность**: Умная обработка ошибок и повторных попыток
|
||
6. **Масштабируемость**: Поддержка множества чатов
|
||
|
||
### 8. Рекомендации по использованию
|
||
|
||
1. **Мониторинг**: Регулярно проверяйте статистику через `/ratelimit_stats`
|
||
2. **Настройка**: При необходимости корректируйте конфигурацию под ваши нужды
|
||
3. **Алерты**: Настройте уведомления при высоком проценте ошибок
|
||
4. **Тестирование**: Проверяйте работу в тестовой среде перед продакшеном
|
||
|
||
### 9. Будущие улучшения
|
||
|
||
- Интеграция с системой метрик (Prometheus/Grafana)
|
||
- Автоматическое масштабирование ограничений
|
||
- A/B тестирование разных конфигураций
|
||
- Интеграция с системой алертов
|