Pull to refresh

Comments 6

Монолитная архитектура - это архитектурный стиль, при котором весь код бота находится в одном большом и сложном модуле или файле.

Ну понятно, "Middle" с курсов Otus не годится даже в стажёры. Ядро Linux по их меркам - это 6 миллионов микросервисов видимо ?

Антипаттерн №6: Зависимость от внешних API

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

  • с недоступностью API из-за поломки его сервера вряд ли можно что-то сделать, только сотрудничать с провайдером API и договариваться о резервировании

  • смена формата API обычно не происходит внезапно, хорошие провайдеры стараются заранее предупреждать и обеспечивать совместимость хотя бы какое-то время

  • юридические ограничения (например санкции) я обсуждать скорее всего не смогу.

Если вы не хотите зависеть от API, вы должны либо полностью отказаться от его использования, либо иметь альтернативное решение, на которое можете переключиться прозрачно для пользователя.

Использование asyncio - не убирание зависимости, а лишь способ конкурентной обработки. Оно не решает никаких проблем вызванных наличием зависимости, только помогает работать в высококонкурентной среде. Вместо asyncio в каких-то случаях вполне подходит threading, а в каких-то - фоновая обработка с помощью очередей.

Указанный в пример "асинхронный код" на самом деле полностью синхронный, хоть и использует aiohttp - в нем все действия делаются строго по очереди. Чтобы что-то начало работать асинхронно надо как минимум запустить несколько задач по обработке, а ещё учесть как телеграм доставляет сообщения (например, число коннектов при вебхуках ограничено и он ждет успешного ответа на запрос).

Пример оптимизации блокирующей операции с использованием asyncio

Возможно я не так понял приведенные примеры, но данные примеры для блокирующей и не блокирующей операции у вас идентичны (и отличаются только словом "Блокирующая операция" и "Асинхронная операция" в комментарии). Можно уточнить этот момент?

Вроде, Telegram не позволяет запускать ботов с одинаковым api_key на разных устройствах.

Как в этом случае отказаться от монолитной архитектуры? Если использовать бота как прокси для запросов и перенаправлять их обработку на свои микросервисы, то получается что сам бот начинает зависеть от внешних API, что противоричит пункту 6.

Телеграм не разрешает получать апдейты с нескольких "устройств". То есть вы не можете запустить несколько копий поллинга или настроить несколько хуков. В остальном, токен может юзать сколько угодно процессов, главное не выходить на лимиты запросов.

это ChatGPT, 100%. такую простыню полу-осмысленных околопрограммистских советов только эта вещь может вы... писать.

Sign up to leave a comment.