Nigrimmist
@Nigrimmist
Asp.net senior developer

Архитектура/стек для telegram — бота, где не прав? Aws. +Метрики. Логи?

Хочу сделать в рамках хобби-проекта кое-какого бота для telegram, хотелось бы чтобы потыкали палочками в предложенную архитектуру.

Типичный флоу :
Юзер пишет боту -> получает ответ. Ответ может быть как простым, так и стартом других "под-команд", есть "тяжёлые" операции (работа с загруженной графикой через бота).

Приоритеты:
- недорого (до ~100$ в месяц) при n юзеров (допустим 500 в месяц, каждый по 100 сообщений в месяц)
- несложное масштабирование в случае резкой возросшей нагрузки (подразумевается возможность резкого вирусного эффекта, но это не точно :) )
- время ответа пользователю не критично (до 10s)

Как я вижу архитектуру :
1) Amazon api gateway получает запрос с вебхука телеги.
2) Перекидывает его в amazon Lambda
3) Та делает минимальное логирование/метрики и прокидывает дальше в очередь Amazon SQS
4) Дальше очередь разбирается n бекендами (для начала той же Lambda), если это "быстрый" ответ - отвечает юзеру в телегу, если "сложный" - кладёт в SQS и уже это сообщение подбирается другим специальным отдельным EC2 инстансом.
бд : Amazon DynamoDB для удешевления и скорости.

В случае перерасхода средств пути для удешевления :
Пункты 1 и 2 перекидываются на EC2 или инстанс digital ocean'а, допустим, как и бекенды обрабатывающие очередь. Что хотелось бы сохранить на aws - очередь как ключевой узел с точки зрения отказоустойчивости системы, главное иметь возможность её разгрести в случае завала, всё остальное вторично (наверное кроме стабильного api gateway перед очередью).

Нерешённые вопросы :
1) Имею небольшой опыт работы с prometheus и grafana, хотелось бы и тут их использовать. Подскажите как нынче проще всего интегрировать их? Им нужна своя бд? Проще ли и дешевле ли будет это всё хостить на DO или же сносно будет и на AWS?
2) Что можно использовать для сбора логов сегодня из разряда дёшево и сердито?
  • Вопрос задан
  • 678 просмотров
Решения вопроса 1
inoise
@inoise Куратор тега Amazon Web Services
Solution Architect, AWS Certified, Serverless
Как я вижу архитектуру :
1) Amazon api gateway получает запрос с вебхука телеги.
2) Перекидывает его в amazon Lambda
3) Та делает минимальное логирование/метрики и прокидывает дальше в очередь Amazon SQS
4) Дальше очередь разбирается n бекендами (для начала той же Lambda), если это "быстрый" овтет - отвечает юзеру в телегу, если "сложный" - кладёт в SQS и уже это сообщение подбирается другим специальным отдельным EC2 инстансом.
бд : Amazon DynamoDB для удешевления и скорости.


Да, абсолютно нормальней подход

В случае перерасхода средств пути для удешевления :
Пункты 1 и 2 перекидываются на EC2 или инстанс digital ocean'а,


Или AWS ECS + Fargate с scale to 0. В нагрузку получим бонусом работу с контейнерами. И еще придется же все-равно делать троттлинг по скорости отправки. Сколько там сегодня - все те же 30 сообщений в секунду?

1) Имею небольшой опыт работы с prometheus и grafana, хотелось бы и тут их использовать. Подскажите как нынче проще всего интегрировать их? Им нужна своя бд? Проще ли и дешевле ли будет это всё хостить на DO или же сносно будет и на AWS?


дорого, долго настраивать и почти бесполезно в AWS

Что можно использовать для сбора логов сегодня из разряда дёшево и сердито?


В идеологии AWS - ничего кроме CloudWatch. Вне AWS используйте что знаете - все-равно самостоятельно разворачивать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Непонятно зачем автору здесь grafana и prometheus. Выглядит ненужным обвесом. Кроме того требует полноценного и дорогого EC2 на фоне всего остального которое почти serverless.
Ответ написан
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
Плюсану к Иван Шумов, с небольшими добавками.
Если пет проект - телеграм бот с описанной вами архитектурой, то не стоит городить еще один пет-проект "прометеус мониторинг" рядом. Клаудвотч для вас предоставит достаточный уровень логирования\мониторинга для бота, причем в дальнейшем его можно расширять так же сервисами AWS
Крутить prometheus рядом, конечно, можно, но, как и упоминал Иван, это приведет к удорожанию проекта: вам необходимо будет забирать метрики исполнения функций из CloudWatch (что довольно таки дорого) и\или слать метрики\логи из лямбд напрямую в ваш прометей, что увеличит стоимость выполнения лямбды
Я бы возложил хранение метрик и логов на cloudwatch, и решал проблемы мониторинга-логирования когда они возникнут (если вы действительно что-то не сможете клаудвотчем сделать)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы