Как стать автором
Обновить

Опыт работы с Serverless-архитектурой для Telegram-бота на Vercel и Timeweb Cloud

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.7K

В последнее время активно занимаюсь разработкой Telegram-бота с использованием Serverless-подхода.

Вводные

Почему Serverless?

  • Экономика.
    Vercel: даёт возможность запустить apps бесплатно, и прицепом подключить blob хранилище и бд. Конечно, с ограничениями, которые на этапе MVP проекта кажутся недосигяемыми.
    Цена: Бесплатно

    @Timeweb_Cloud существенно низкие цены, в сравнении с vds от них же.
    Цена Apps: 0.34р/час+
    Цена VSD: 0.68р/час+
    НО мы не сраниваем VDS, это для наглядности.

  • Возможностью сосредоточиться на коде.
    И там и там, я просто подключаю репу, и пушаю код. Я не задумываюсь о серверах, сертификатах, докерах и всем таком остальном. А это существенная строка времязатрат.

Почему Vercel и TW?

  • Vercel - это мой начальный выбор, благодаря бесплатной цене.

  • Timeweb - знаком с платформой с давних лет.

Функционал и стек:

  • Бот выступает в роли AI-ассистента с интеграцией OpenAI.

    • Поэтому должен работать на серверах, которые не попадут под ограничения со стороны openAI из-за санкций.

  • Технологический стек: NestJS, облачная БД Neon (Vercel), blob-хранилище (Vercel)

История Timeweb

Vercel меня устраивал всем, за исключением недостатка возможности работы без vpn с сервисом. И честным serverless требованием к архитектуре приложения, которое по началу я воспринимал, как ошибку инфры Vercel.

Переезд с V на TW

С увеличением кодовой базы проекта, я стал наблюдать, что код просто переставал работать. В логах ошибок нет. Вебхук отрабатывал успешно. Причем такое поведение было рандомно. То работало, то не работало. Паралельно я общался с community Vercel, т.к. халявщикам поддержка не выделена, но community мне не помогло. И я решил переехать к TW, переезд занял мин 15, все взлетело, и я был доволен...пока...

Мои проблемы в TW

В один из дней, мои пользователи бота начинают массово жаловаться, что бот не работает. Я замечаю, что в консоли TW. ЦП забит под 100% уже несколько часов.

Раздел логов и деплоя приложения в TW тоже не открывается (бесконечный экран полинга). Кнопка рестартов недоступны, и я пытаюсь:

1) Сделать коммит, чтобы TW получив новый коммит, передеплоил приложуху: CPU - 100%, логи недоступны.
2) Я пытаюсь выбрать любой другой предыдущий успешный коммит: CPU - 100%, логи недоступны.
3) Пишу тикет в пятницу в 18 часов 10326999 в котором мне сказали, что передеплоили приложуху: CPU - 100%, логи недоступны.
4) Пишу, что не помогло. Прежде чем изучить ответ, напоминаю ( Цена Apps: 0.34р/час+ )
Ответ:

Сегодня уже не сможем дать ответ, т.к. требуется консультация с инженерами, а они работают в будние дни с 9 до 18. Также не удаляйте само приложение или попробуйте сделать повторный делой уже в понедельник.  Пожалуйста, ожидайте.

Время приключений TW

Я точно знаю, что дело не в коде. Кнопки включить/выключить нет. И я удаляю apps и создаю новый, сервис взлетел. Вижу новый УРЛ сервиса, заливаю его в конфиг, заливаю в репу: CPU - 100%, логи недоступны.
Правило 1: В успешном apps лучше не заливать новый коммит.

Удаляю apps, создаю новый. Зависает на деплое, в логах ошибка по ключу id_rsa.. что-то там.
Удаляю, создаю новый. Заливаю новый конфиг, повторный деплой взлетел. Бот не работает, открываю логи, openAI откидывает меня по 403 по региону. В новом тикете дают гипотезу:
Правило 2: Выбранный регион НЕ РФ, не гарантирует что ваш ip не в ЧС openAI/Bitbucket

Понимаю, что делать коммиты - опасно. Уточняю в тикете, как побороть проблему с новым урлом при создании apps. Как его узнать заранее, чтобы деплоить с 1го коммита нужный урл? Предложили так:

Настроить DNS - записи для технического домена - нельзя. Для привязки технического домена следует удалить домен "tmdev-fitness.tw1.su" и добавить заново в панель управления.

Костыль, но лучше, чем неработающее приложение. Создаю бесплатный домен в TW, привязываю его к apps. Apps не взлетает, удаляю его. Удаляю домен. Раза с 3го деплоится успешно apps, создаю домен, который уже в репе. Бот не работает...
Со стороны telegram ошибка: Webhook-info: Connection time out
Правило 3: После удаления бесплатного домена, созданный аналогичный домен, может не работать.

История Vercel

В паралель с формированием правил работы с apps в TW, я пытался поднять ту же кодовую базу в Vercel. К деплоям никаких вопросов, но код так же рандомно то работал, то нет. Логи ничего не давали, community не в силах мне помочь. Пришлось дебажить каждую строку, чтобы понять в чем проблема.

Проблема

Вернемся к началу статьи: "...честным serverless требованием к архитектуре приложения, которое по началу я воспринимал, как ошибку инфры Vercel..."
Моя архитектура не подруземывала "холодный запуск" - это концепция подхода serverless. Именно поэтому у него такие низкие цены, в сравнении с VDS. Ваш процесс спит ( idle timeout ), пока его не разбудят, в то время как в VDS, он постоянно в памяти.

Idle Timeout

Vercel: После деплоя, мой процесс был в памяти, и бот работал. Через n минут (около 2мин), он уходил в спячку. Telegram делал webhook, будил процесс, и терялся где-то между слоями приложения, поскольку бот не успевал полностью инициализироваться, прежде чем ему нужно обработать команду. Вылечил, просто добавив проверку статуса инициализации бота перед обработкой команд.Это объясняет, почему бот рандомно то работает, то нет.
И это объясняет, почему не выполняются процессы по расписанию ( потому что процесс может спать, когда нужно выполнить что-то по расписанию )

Timeweb: Таких проблем, как в vercel, не было. Кроме того, там работают шедулеры (процессы по расписанию), поэтому я сделал вывод, что в Vercel - честный serverless. В Timeweb - нет.

Выводы

А какой у меня выбор?) Я учел все эти недостатки в коде, и теперь организационно я делаю следующие шаги:

  • Если TW apps уходит в проблему, просто меняю вебхук до vercel ~ 1 мин
    Теперь бот работает, но не работают шедулеры.

  • Запускаю сразу по 3-4 apps в TW

    • В успешных apps проверяю доступность до bitbucket/openai

      • Перевожу вебхук на TW, итого ~ 10 мин

Т.е. TW по прежнему основной мой apps, а Vercel, как запасной план.

Надеюсь, мой опыт сохранит вам много нервов и кофеина.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Испытывали ли вы сложности при развертывании Telegram-бота в serverless-среде?
10% Да, испытывал сложности1
20% Нет, все взлетело сразу2
70% Мои боты живут на vds/vps/хостингах7
0% Свой вариант0
Проголосовали 10 пользователей. Воздержались 2 пользователя.
Теги:
Хабы:
+1
Комментарии14

Публикации

Работа

DevOps инженер
31 вакансия

Ближайшие события