Fargate vs Lambda, когда использовать который? - PullRequest
0 голосов
/ 11 сентября 2018

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

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

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

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

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

docker run <some_input>

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

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

docker run --expose 80

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

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

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

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

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

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

0 голосов
/ 06 декабря 2018

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

0 голосов
/ 11 сентября 2018

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

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

...