Нужна ли лямбда?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В одной из прошлых статей о NestJS + GraphQL + Lambda я получил очень интересный комментарий. Поэтому и решил поделится своими мыслями и опытом о том, когда все-таки стоит использовать Lambda функцию, а когда - нет.

Я буду говорить про AWS Lambda, потому что имею с AWS больше всего опыта. Для начала давайте рассмотрим основные свойства лямбда - функции:

  • вы платите только за время выполнения и за трафик между лямбда и другими AWS сервисами

  • бесплатный уровень использования 1 млн вызовов и 400 000 ГБ-секунд вычислений в месяц

  • очень хорошо интегрируется с другими сервисами AWS

  • горизонтальное авто масштабирование

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

И тут есть всем известный лайф-хак.

AWS держит ваше приложение запущенным 15 мин с момента последнего вызова. И при этом вы оплачиваете только время выполнения. Поэтому появилось такое понятие как прогрев лямбда-функции. Для этого можно использовать другую лямбда функцию, которая раз в 12 минут (например) будет вызывать health метод во всех лямбда функциях, которые необходимо прогреть. Но все равно это затратно.

Мой топ использования лямбда функций:

Бесплатный хостинг

Если объединить “оплата только за время выполнения” и “бесплатный уровень использования” можно получить отличный бесплатный хостинг для не нагруженных проектов. Для которых не особо важно время холодного старта. Также еще можно добавить бесплатную MongoDB в том же AWS регионе при помощи этого сервиса mongodb.com и получим полноценный backend. Пример использования описан в этой статье

Обработка файлов

Я очень часто использую S3 для хранения файлов. А лямбда умеет хорошо интегрироваться с сервисом S3. Поэтому можно настроить вызов лямбды при добавление нового файла в S3. Что это дает? Можно например нарезать thumb с одной большой картинки во всех форматах и ложить опять же в S3. ( более подробно в этой статье). 

Либо вот пример готового стека, его можно развернуть в течении 5 минут в своем AWS акаунте. В этом примере лямбда вызывается по запросу пользователя в CloudFront и если видео еще не преобразовано, то запускается нарезка видео на кусочки hls потока. При следующем запуске видео уже берется напрямую из S3. Кроме этого уже существует огромное количество готовых решений

Обработка очереди

Лямбда функцию можно использовать как обработчик в очереди AWS SQS. Но тут нужно понимать выгодно ли это. Если большая нагрузка, то чаще всего выгодней поднимать свой обработчик на отдельном сервере.

Ограничения

Нужно не забывать об ограниченях, с которыми сталкиваешь при разработке:

  • максимальное время исполнения - 900 секунд (15 мин). Если у вас задача, для которой надо больше времени, то лямбда это не лучшее решение.

  • время холодного старта (подробнее описал выше)

  • максимальный размер архива лямбды 50 МБ, а распакованный размер всего кода лямбды с модулями не должен превышать 250 МБ. И тут очень важно использовать павильные модули для своих приложений. Так как, бывают такие, которые в себе содержат бинарники с достаточно большим размером.

  • максимальный размер всех лямбда функций, загруженных в этот аккаунт, со всеми версиями этих функций и слоями не должны превышать 75 ГБ. Это очень важное ограничение. (может быть увеличено по запросу)

  • максимальное количество паралельно запущенных лямб - 1000. (может быть увеличено по запросу)

  • для работы с файлами выделяется конкретная папка /tmp, масимальный размер которой не долежн превышать 500 МБ

Выводы: использования лямбд очень хорошо ложится в начале пути проекта. А также в местах, не часто вызывающихся. Она удобно и быстро разворачивается, но как только мы приближаемся к статусу High Load - нужно срочно переосмысливать архитектуру проекта и переходить на собственную инфраструктуру, например на kubernetes.io

Источник: https://habr.com/ru/post/648885/


Интересные статьи

Интересные статьи

Вам мало обычного интернета! Нет? А вас не спрашивали! По мнению мастодонтов Кремниевой долины обычный интернет устарел, и его нужно обновить. Как вы, наверное, слышали, Цукерберг для этого решил...
Нередко при работе с Bitrix24 REST API возникает необходимость быстро получить содержимое определенных полей всех элементов какого-то списка (например, лидов). Традиционн...
Aqua-Fi — это новая технология для скоростного беспроводного интернета под водой. Обычный Wi-Fi в этих условиях бессилен. Подводные телекоммуникации всегда были проблемой. Радиосиг...
Когда вы делаете рекламное видео об игре, возникает вопрос: добавлять ли дикторскую озвучку? С одной стороны — выглядит как мастхэв, с другой — может, обойтись и без неё? Разбираем на примера...
Если вам нужна клавиатура, вы можете её приобрести. Если вам нужна небольшая клавиатура, то тут всё сложнее. Кроме вариантов с переделкой клавиатуры от Blackberry или возни с крохотными такти...