Рубрики
Без рубрики

Оптимизация производительности AWS Lambda

В этом посте мы рассмотрим, как вы можете оптимизировать производительность функции AWS Lambda. Хотя Лос-Анджелес… С тегами aws, без сервера, производительность, java.

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

Давайте рассмотрим некоторые из оптимизаций производительности лямбды

Повторное использование контекста выполнения

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

import json
import boto3
#DynamoDB defined outside of handler
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
    table = dynamodb.Table("MyTable")
    response = table.get_item(Key={'userid': username})

    return {
        'statusCode': 200,
        'body': json.dumps(response['Item) 
      }

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

Минимизировать Пакет Развертывания

Пакет развертывания – это ZIP-архив, содержащий скомпилированный код функции и зависимости. В случае, если ваш обработчик лямбда-кода находится на Java, вам необходимо иметь банку с жиром, известную как Uber Jar, для загрузки в Lambda. Uber jar будет содержать все зависимости, необходимые для выполнения обработчика. Важно, чтобы вы импортировали только те пакеты, которые необходимы. Например, если вам нужна только базовая реализация Lambda, то импортируйте только lambda-java-core зависимость – она определяет интерфейсы методов обработчика и объект контекста, который среда выполнения передает обработчику. Если вы определяете свои собственные типы ввода, это единственная библиотека, которая вам нужна. Вам не нужна полная зависимость aws-sdk для написания простых лямбда-обработчиков. Использовать спецификацию POM ( https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-bom ) в проекте maven и предоставляет отдельные зависимости от спецификации POM для импорта. Это уменьшит размер банки с жиром. Имейте в виду, что в lambda вы работаете с ограниченным размером диска и памятью, как определено в конфигурации. В Python и других языках вы можете импортировать только те модули, которые вам нужны. Например, в машинописном виде

// import entire SDK
import AWS from 'aws-sdk';
// import AWS object without services
import AWS from 'aws-sdk/global';
// import individual service
import S3 from 'aws-sdk/clients/s3';

Используйте Простые Фреймворки

Вместо использования полномасштабной пружинной каркасной конструкции попробуйте использовать облегченные фреймворки, которые выполняют те же задачи. Например: Если вам нужна инъекция зависимостей Java в ваше приложение, используйте облегченные фреймворки, такие как Guice (произносится “сок” – это облегченная платформа для инъекций зависимостей для Java 6 и выше, предоставленная вам Google)

Существуют ли какие-либо другие методы лямбда-оптимизации? Дайте нам знать в комментариях!

Если вам нравятся мои статьи, не стесняйтесь следовать за мной дальше Твиттер для обновлений!

Оригинал: “https://dev.to/rajanpanchal/aws-lambda-performance-optimizations-4hn6”