#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 — это не настоящий центр обработки данных в облаке (как его называют люди), а скорее программно определяемая сеть, мы можем использовать подобные вещи