Фаргат против Лямбда, когда использовать что?

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

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

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

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

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

docker run <some_input>

Тогда это работа для Лямбды.

Но если контейнер сконструирован так, чтобы сделать что-то вроде:

docker run --expose 80

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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

Чтобы узнать больше о я рекомендую эту статью https://medium.com/greenm/aws-lambda-or-aws-fargate-the-step-by-step-guide-to-choosing-the-right-technology-925ebcf89b7c