Найти тему
HowToSchool

SD-EP48: Как работает AWS Lambda?

Serverless(бессерверные вычисления/сервисы) — одна из самых горячих тем в облачных сервисах. Так как AWS Lambda работает за кулисами?

Lambda — это служба бессерверных вычислений, предоставляемая Amazon Web Services (AWS), которая запускает функции в ответ на события.

Функции Lambda выполняются на экземплярах EC2(рабочие инстансы от AWS) с Amazon Linux в качестве базовой ОС и гипервизора. Эти экземпляры EC2, так называемые «рабочие узлы Lambda», содержат множество функций Lambda из разных учетных записей клиентов. Виртуальная машина, обеспечивает надежную изоляцию, и в AWS Lambda это Firecracker MicroVM. Это технология виртуализации, разработанная в Amazon и написанная на Rust. Одна такаявиртуальная машина выполняет одну функцию Lambda.

Lambda Sandbox – это «песочница», в рамках которой, выполняется среда выполнения Lambda для конкретного языка. Эта среда выполнения выполняет функцию пользователя и не допускает параллелизма. Это означает, что в любой момент времени лямбда-функция выполняет ровно один запрос. Для обработки N параллельных запросов необходимо наличие N экземпляров Lambda, и AWS автоматически развернет до 1000 таких экземпляров для обработки 1000 параллельных запросов.

-2

Жизненный цикл выполнения Lambda функции

AWS Lambda сожержит множество компонентов, которые отвечают за выполнение ваших функций. При поступлении нового запроса инфраструктура AWS Lambda ищет простаивающий экземпляр запрошенной функции Lambda или выделяет новый на рабочем узле, а затем выполняет запрос. На рисунке выше показан полный жизненный цикл подготовки вызова Lambda, где желтым отмечены операции, которые происходят только при так называемом «холодном запуске» (coldstart).

-3

«Холодный запуск»

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

После каждого выполнения AWS Lambda переводит экземпляр в спящий режим (Freeze). Другими словами, экземпляр зависает (аналогично ноутбуку в спящем режиме). Виртуальный процессор выключен. Это освобождает ресурсы на рабочем узле. Накладные расходы, связанные с пробуждением (Thaw) такой функции, незначительны.

Конечно, инфраструктура Lambda также должна позаботиться об удалении экземпляров (Dispose), которые были заморожены на определенный период времени, поскольку песочница по-прежнему распределяет ресурсы на диске. Время, необходимое для удаления неиспользуемой функции, зависит исключительно от AWS, но ориентировочное значение составляет около одного часа. Кроме того, функции Lambda, независимо от того, используются они постоянно или нет, будут удалены примерно через шесть часов. Это еще одна мера по равномерному перераспределению нагрузки внутри инфраструктуры AWS Lambda.

P.S. В чем выгода сервиса AWS Lambda в сравнении традиционными системами на базе хоста или контейнера?