Fargate vs Lambda, когда какую использовать?

Я новичок во всей бессерверной среде, и я пытаюсь понять, когда использовать Fargate против Lambda.

Я знаю, что Fargate - это бессерверное подмножество ECS, а Lambda тоже бессерверное, но управляемое событиями. Но я хотел бы иметь возможность объяснить две парадигмы простыми словами другим людям, которые знакомы с контейнерами, но не очень хорошо знакомы с AWS и бессерверными.

В настоящее время у нас есть несколько физических серверов, отвечающих за получение текстовых файлов, их анализ и заполнение нескольких таблиц БД результатами. Исходя из моего понимания, я думаю, что этот вариант использования лучше подходит для Lambda, потому что процесс, который анализирует текстовые файлы, запускается по расписанию, выполняется недолго и замедляется, когда он не используется.

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

С точки зрения контейнеров и в очень общих чертах можно было бы с уверенностью сказать, что если контейнер предназначен для:

docker run <some_input>

Тогда это работа для Lambda.

Но если контейнер предназначен для чего-то вроде:

docker run --expose 80

Тогда это работа для Фаргейта.

Это хорошая аналогия?


person janDro    schedule 11.09.2018    source источник


Ответы (4)


Это начало хорошей аналогии. Однако Lambda также имеет ограничения с точки зрения доступного ЦП и ОЗУ и максимального времени выполнения 15 минут на один вызов. Так что все, что требует больше ресурсов или должно работать дольше 15 минут, лучше подойдет для Fargate.

Также я не уверен, почему вы говорите, что что-то лучше подходит для Fargate, потому что вам всегда нужен хотя бы один запущенный экземпляр. Lambda + API Gateway отлично подходит для вызовов API. API-шлюз всегда готов принять вызов API, а затем вызовет лямбда-функцию для его обработки (если ответ еще не кэширован).

person Mark B    schedule 11.09.2018
comment
Спасибо, Марк, у меня также сложилось впечатление, что Lambda была создана для контейнеров, хотя это не так. Еще есть чему поучиться! - person janDro; 11.09.2018
comment
@janDro они запускаются в докерах в фоновом режиме, но у нас нет к ним доступа, они языковые докеры. Вот где пригодится Фаргейт. - person Mojimi; 20.07.2019

Важно отметить, что с Lambda вам не нужно создавать, защищать или поддерживать контейнер. Вы просто беспокоитесь о коде. Теперь, как уже упоминалось, у Lambda есть ограничение на максимальное время выполнения и ограничение памяти 3 ГБ (ЦП увеличивается пропорционально). Кроме того, если он используется время от времени, его может потребоваться предварительный нагрев (по расписанию) для дополнительной производительности.

Fargate управляет контейнерами докеров, которые необходимо определять, поддерживать и защищать. Если вам нужен больший контроль над тем, что доступно в среде, в которой выполняется ваш код, вы потенциально можете использовать контейнер (или сервер), но это опять же идет с управлением. У вас также есть больше вариантов для размера памяти / процессора и продолжительности времени, которое может потребоваться для запуска.

Даже для сервера API, как вы упомянули, вы можете поставить шлюз API впереди и вызвать Lambda.

person Pedro Graber    schedule 11.09.2018
comment
Стоит сказать, что даже с ограничениями лямбда вы можете запланировать лямбда для вызова нескольких других лямбда, скажем, для загрузки и изменения размера некоторых изображений, чтобы вы могли легко обойти ограничения и иметь довольно быстрый поток. - person Mojimi; 20.07.2019
comment
@Mojimi вызывает лямбду, которая вызывает лямбду, которая вызывает лямбду, о да, я бы хотел, чтобы это работало в большом проекте с несколькими разработчиками. НЕТ. - person Donato; 17.07.2020

Как уже упоминал Марк, вы можете Lambda + API Gateway предоставить свою лямбда-функцию как API. Но лямбда имеет значительные ограничения с точки зрения выполнения функций. Существуют ограничения на поддерживаемые языки программирования, потребление памяти и время выполнения (недавно оно было увеличено до 15 минут с 5 минут ранее). Здесь может помочь AWS Fargate, предоставляя преимущества как мира контейнеров, так и мира без серверов (FaaS). Здесь вы беспокоитесь только о контейнере (его ЦП, требованиях к памяти, политиках IAM ...), а все остальное оставляете Amazon ECS, выбрав тип запуска Fargate. ECS выберет правильный тип инстанса, будет управлять вашим кластером, его автоматическим масштабированием и оптимальным использованием.

person vkumars    schedule 05.12.2018

Это правильная аналогия, но это не исчерпывающий список, позволяющий объяснить две парадигмы.

В целом Lambda больше подходит для бессерверных приложений. Его природа - функция как услуга (FaaS). Он просто выполняет простые задачи и все. Не ожидайте большего.

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

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

  1. Портативность
  2. Контроль окружающей среды
  3. Тип триггера
  4. Время отклика
  5. Размер ответа
  6. Время обработки
  7. Использование памяти

Это основные факторы. Но в список не включены все факторы и ограничения, которые следует учитывать между обеими этими бессерверными технологиями.

Чтобы узнать больше, я рекомендую эту статью https://greenm.io/aws-lambda-or-aws-fargate/

person okiri    schedule 28.08.2019