Масштабируемость в Telegram: Как я оптимизировал Darion Game для работы под нагрузкой
В прошлой части мы разобрали старт проекта. Сегодня копнем глубже: поговорим о внедрении клановой системы и о том, как пришлось перестраивать менеджмент ресурсов, чтобы бот не «захлебнулся» при наплыве игроков.
Клановая система: Больше, чем просто префикс
Создание кланов в Telegram-RPG — это всегда вызов для UX. Нужно дать игроку удобный интерфейс управления, сохранив при этом чистоту данных.
Для Darion Game я реализовал трехуровневую валидацию при создании сообществ:
- Стейт-менеджмент (FSM): Пошаговое создание (название -> описание -> настройки).
- Data Integrity: Чтобы исключить XSS-уязвимости и порчу верстки (из-за некорректных HTML-тегов в названиях), я внедрил строгую фильтрацию через регулярные выражения. Допускаются только буквенно-цифровые комбинации.
- Социальные механики: Реализовал систему заявок. Если клан закрытый, лидер получает уведомление с Inline-кнопками «Принять/Отклонить» прямо в ЛС, что позволяет управлять составом, не выходя из режима игры.
Архитектурный вызов: Борьба за дескрипторы
В процессе эксплуатации я столкнулся с классической проблемой асинхронных приложений — утечкой дескрипторов файлов (OSError: [Errno 24]).
Любая асинхронная RPG на Python (Aiogram 3.x + SQLAlchemy) при росте базы начинает активно потреблять ресурсы системы. Если хендлер прерывается исключением (например, при валидации данных в Pydantic), стандартные механизмы закрытия сессий могут дать осечку.
Как я решил этот вопрос: Я перешел от стандартного подключения к использованию Connection Pooling. Ограничение пула соединений позволило стабилизировать работу с SQLite:
Это не просто ограничило потребление памяти, но и сделало бота устойчивым к «каскадным» сбоям. Теперь даже при возникновении исключения в одном из потоков, общая производительность системы не страдает.
Кастомизация и социалка
Одним из ключевых нововведений стала генерация динамических карточек профиля через Pillow. Это мощный инструмент удержания: игроки делятся своими карточками в чатах, запуская виральный рост.
Также мы добавили возможность монетизации для лидеров кланов — покупку привязки внешней ссылки на чат за игровую валюту. Это превращает клан из простого списка игроков в реальное внешнее комьюнити.
Что дальше?
Сейчас в приоритете — система Казны и экономические бусты для сообществ. Мы строим не просто бота, а устойчивую экономическую модель, где каждое решение игрока влияет на баланс сил в мире Darion.