Анатомия жизненного цикла AWS Lambda

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

AWS Lambda

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

Лямбда-функция

Это определение нашего развертывания. Она содержит параметры конфигурации и zip-пакет с нашим кодом. Однако это не работающий код, а просто определение для него.

Среда выполнения лямбда-функции

Это запускаемый экземпляр нашего кода, который был развернут в безопасной, изолированной среде выполнения с использованием конфигурации нашей функции Lambda Function. Дополнительные среды выполнения создаются по мере поступления запросов и необходимости увеличения емкости для их обработки. AWS Lambda будет создавать их по мере необходимости и закрывать, если они простаивают слишком долго. У нас может быть одна среда выполнения, сотни или ни одной. Все они управляются автоматически. Каждая среда выполнения получает объем памяти и вычислительной мощности, назначенный ей по ее определению, а также 512 МБ эфемерного хранилища. Важно отметить, что эти среды выполнения полностью независимы друг от друга, поскольку они не имеют общего состояния.

Более подробное описание можно найти на официальной странице среды выполнения AWS Lambda.

Вызов Lambda

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

Для получения более подробной информации ознакомьтесь с этой фантастической статьей о понимании масштабирования и пропускной способности AWS Lambda.

Жизненный цикл и биллинг

Следующий график взят из документации по среде выполнения AWS Lambda.

Биллинг вызова Lambda основан только на продолжительности фазы INVOKE. Фаза INIT не тарифицируется, если не используется предоставленный параллелизм или фаза INIT превышает 10 с.

Более подробную информацию о тарификации фазы INIT можно найти в этой замечательной статье.

Кроме того, производительность фазы INIT повышается для конфигураций с малым объемом памяти. Таким образом, если для функции Lambda не установлен высокий лимит памяти (например, 5 ГБ), фаза INIT занимает одинаковое количество времени для всех конфигураций.

Что дальше

В следующем посте мы рассмотрим варианты компиляции и развертывания, которые влияют на производительность.

Оцените статью
devanswers.ru
Добавить комментарий