Масштабируемость в Telegram: Как я оптимизировал Darion Game для работы под нагрузкой

В прошлой части мы разобрали старт проекта. Сегодня копнем глубже: поговорим о внедрении клановой системы и о том, как пришлось перестраивать менеджмент ресурсов, чтобы бот не «захлебнулся» при наплыве игроков.

Клановая система: Больше, чем просто префикс

Создание кланов в Telegram-RPG — это всегда вызов для UX. Нужно дать игроку удобный интерфейс управления, сохранив при этом чистоту данных.

Для Darion Game я реализовал трехуровневую валидацию при создании сообществ:

  1. Стейт-менеджмент (FSM): Пошаговое создание (название -> описание -> настройки).
  2. Data Integrity: Чтобы исключить XSS-уязвимости и порчу верстки (из-за некорректных HTML-тегов в названиях), я внедрил строгую фильтрацию через регулярные выражения. Допускаются только буквенно-цифровые комбинации.
  3. Социальные механики: Реализовал систему заявок. Если клан закрытый, лидер получает уведомление с Inline-кнопками «Принять/Отклонить» прямо в ЛС, что позволяет управлять составом, не выходя из режима игры.
Так выглядит меню клана
Так выглядит меню клана

Архитектурный вызов: Борьба за дескрипторы

В процессе эксплуатации я столкнулся с классической проблемой асинхронных приложений — утечкой дескрипторов файлов (OSError: [Errno 24]).

Любая асинхронная RPG на Python (Aiogram 3.x + SQLAlchemy) при росте базы начинает активно потреблять ресурсы системы. Если хендлер прерывается исключением (например, при валидации данных в Pydantic), стандартные механизмы закрытия сессий могут дать осечку.

Как я решил этот вопрос: Я перешел от стандартного подключения к использованию Connection Pooling. Ограничение пула соединений позволило стабилизировать работу с SQLite:

engine = create_async_engine( url=final_url, pool_size=5, # Стабильное количество потоков к БД max_overflow=10, # Запас прочности при пиковых нагрузках connect_args={"check_same_thread": False} )

Это не просто ограничило потребление памяти, но и сделало бота устойчивым к «каскадным» сбоям. Теперь даже при возникновении исключения в одном из потоков, общая производительность системы не страдает.

Кастомизация и социалка

Одним из ключевых нововведений стала генерация динамических карточек профиля через Pillow. Это мощный инструмент удержания: игроки делятся своими карточками в чатах, запуская виральный рост.

Также мы добавили возможность монетизации для лидеров кланов — покупку привязки внешней ссылки на чат за игровую валюту. Это превращает клан из простого списка игроков в реальное внешнее комьюнити.

Что дальше?

Сейчас в приоритете — система Казны и экономические бусты для сообществ. Мы строим не просто бота, а устойчивую экономическую модель, где каждое решение игрока влияет на баланс сил в мире Darion.

Играли бы вы в экономическую стратегию внутри мессенджера?
Да
Нет
3 комментария