Тысячи Telethon-сессий ломаются не от лимитов, а от плохой схемы хранения
Если у вас десятки или сотни аккаунтов, файл .session уже не масштабируется: его сложно индексировать, тяжело обновлять и почти невозможно безопасно распределять между воркерами. База нужна не “для красоты”, а чтобы управлять жизненным циклом сессии как объектом: создать, заблокировать, перевести на другой сервер, удалить.
Рабочая схема обычно такая:
— таблица sessions: api_id, phone, dc_id, auth_key, proxy_id, status, last_used;
— отдельные поля для TTL, флага 2FA, причины бана, счётчика FloodWait;
— уникальный ключ на phone или user_id, чтобы не плодить дубликаты;
— шардирование по статусу или пулу воркеров, если очередь растёт.
Критичный момент — не хранить всю логику в одном процессе. Один сервис пишет метаданные, другой поднимает Telethon-клиент, третий принимает решения по ротации. Так проще ловить RPCError, откатывать неудачные подключения и не терять auth_key при падении контейнера. Логи должны фиксировать, какая сессия ушла в FloodWait, какой proxy был активен и кто последним трогал запись.
Ещё одна ошибка — смешивать “живые” и “грязные” сессии в одном пуле. Разделяйте статусы: active, cooling_down, banned, pending_reauth. Тогда оркестратор не будет пытаться реанимировать заведомо мёртвый клиент и сэкономит время на дебаге. Оптимизируем сессии, избегаем лимитов.
Если нужна масштабируемость, думайте не про количество файлов, а про качество модели данных и дисциплину воркеров: база должна быть источником правды, а Telethon — исполнителем.
Telethon мастерская
@telethon_workshops_ubt
Тысячи Telethon-сессий ломаются не от лимитов, а от плохой схемы хранения
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.