Тысячи Telethon-сессий не масштабируются файловой кучей — нужна база
Файлы сессий работают, пока их десятки. Дальше начинается хаос: гонки за файл, потерянные записи, неудобный бэкап и невозможность быстро понять, какой аккаунт жив, а какой уже словил RPC-ошибку. Если нужен пул из сотен или тысяч клиентов, сессия должна стать записью в БД, а не артефактом на диске.
Базовая схема простая: отдельная таблица для аккаунта, отдельная для состояния подключения, отдельная для метаданных. Храните session string, api_id, phone, proxy, flags, last_seen, flood_lock. Не смешивайте авторизацию и рабочие параметры в одном поле — потом невозможно нормально делать ротацию и аудит.
Ключевой момент — жизненный цикл. Перед стартом берёте запись, проверяете lock, поднимаете клиент, пишете heartbeat, после завершения снимаете lock и фиксируете ошибку, если была. Так вы избегаете двойного запуска одной и той же сессии и не ловите конфликтные подключения. Для очередей задач пригодны статусы: ready, busy, banned, cooldown, dead.
Индексы решают половину проблемы: по status, last_seen, proxy_id, flood_lock. Без них выборка «дай мне 200 свободных аккаунтов» превращается в медленный скан. Дебаг — наш лучший друг в борьбе с FloodWait: логируйте причину остановки, длительность блокировки и контекст запроса, иначе БД станет просто складом мусора.
Оптимизируем сессии, избегаем лимитов. Если архитектура не умеет быстро отметить состояние аккаунта и вернуть его в пул, она не масштабируется, даже если крутится на мощном сервере.
Telethon мастерская
@telethon_workshops_ubt
Тысячи Telethon-сессий не масштабируются файловой кучей — нужна база
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.