Как лямбда-функция AWS масштабируется внутри подсети VPC?

#amazon-web-services #aws-lambda

#amazon-веб-сервисы #aws-lambda

Вопрос:

Я понимаю, что AWS Lambda — это бессерверная концепция, в которой фрагмент кода может быть запущен при некотором событии.
Я хочу понять, как Lambda обрабатывает масштабирование?
Например. если моя лямбда-функция находится внутри подсети VPC, поскольку она хочет получить доступ к ресурсам VPC, и что подсеть имеет CIDR, равный 192.168.1.0/24 , что приведет к 251 доступным IP-адресам после вычитания зарезервированных AWS 5 IP-адресов

Означает ли это, что если моя лямбда-функция AWS получает 252 вызова одновременно,
будет обработан только 251 запрос, и 1 либо завершится по таймауту, либо будет выполнен после завершения выполнения одной из 252 функций?
Имеет ли значение размер подсети для масштабирования AWS Lambda?

Я следую этому справочному документу, в котором упоминаются ограничения одновременного выполнения для каждого региона,
могу ли я предположить, что независимо от того, является ли лямбда-функция AWS не VPC или если она находится внутри подсети VPC, она будет масштабироваться в соответствии с упомянутыми ограничениями в документе? введите описание изображения здесь

Комментарии:

1. .. лямбда-функции могут даже иметь один IP-адрес в вашей подсети.. размер подсети должен иметь значение в сети на самом деле

Ответ №1:

Ответ Владислава по-прежнему технически корректен (размер подсети имеет значение), но с момента его написания ситуация значительно изменилась, и размер подсети имеет гораздо меньшее значение. Смотрите объявление aws:

  • Поскольку сетевые интерфейсы являются общими для всех сред выполнения, обычно для каждой функции требуется всего несколько сетевых интерфейсов. Для каждой уникальной комбинации «Группа безопасности: подсеть» между функциями в вашей учетной записи требуется отдельный сетевой интерфейс. Если комбинация используется совместно несколькими функциями в вашей учетной записи, мы повторно используем один и тот же сетевой интерфейс для всех функций.
  • Масштабирование вашей функции больше не привязано напрямую к количеству сетевых интерфейсов, а гиперплоскостные ENIs могут масштабироваться для поддержки большого числа одновременных выполнений функций

Ответ №2:

Да, вы правы. Размер подсети определенно имеет значение, вы должны быть осторожны со своими блоками CIDR. Что касается последнего вызова (252-го), это зависит от способа вызова вашего lambda: синхронно (например, шлюз API) или асинхронно (например, SQS). Если она вызывается синхронно, она будет просто отрегулирована, и ваш API ответит статусом HTTP 429, что означает «слишком много запросов». Если она асинхронная, она будет отрегулирована и будет повторена в течение шестичасового периода. Более подробное описание вы можете найти на этой странице.

Также я недавно опубликовал пост в своем блоге, который связан с вашим вопросом. Возможно, это окажется полезным.

Комментарии:

1. Итак, если я выберу 2 подсети для лямбда-функции, каждая подсеть размером 251, и если функция вызывается через шлюз API, будет ли это означать, что мой новый масштабируемый размер равен 251 251 = 502?

2. Если только ваши подсети не предназначены для lambda и есть что-то большее (экземпляры EC2?) внутри них это должно быть 502. Рекомендуется размещать lambda в разных подсетях, потому что она становится multi AZ, что обеспечивает отказоустойчивость.

3. Также я должен упомянуть, что на ReInvent 2018 Марк Бугер (ведущий инженер команды AWS Lambda) анонсировал решение для 2019 года как для «холодных запусков» VPC, так и для этого уродливого подхода к вычислению IP-адресов: twitter.com/jeremy_daly/status/1068272580556087296

4. Хорошо, таким образом, размещение функции в нескольких подсетях сделало бы ее доступной, а также помогло бы в масштабировании до суммарного размера доступных частных IP-адресов подсетей, в которых находится функция, вместе взятых?

5. да, поскольку VPC — это не настоящий центр обработки данных в облаке (как его называют люди), а скорее программно определяемая сеть, мы можем использовать подобные вещи