«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > AWS SnapStart — часть. Измерение «холодного» и «горячего» запуска с помощью Java с использованием слоя Lambda (1)

AWS SnapStart — часть. Измерение «холодного» и «горячего» запуска с помощью Java с использованием слоя Lambda (1)

Опубликовано 24 августа 2024 г.
Просматривать:231

AWS SnapStart - Part Measuring cold and warm starts with Java using Lambda layer (1)

Введение

В записи блога «Как создавать, публиковать и использовать слои для функций Lambda в Java 21» мы опубликовали наш первый уровень Lambda в Java 21. В этой статье мы создадим приложение, используя этот слой Lambda, а затем измерим холодный и теплый запуск. раз без включенного SnapStart, с включенным SnapStart, а также с примененной оптимизацией первичного вызова DynamoDB. Мы также сравним результаты с нашими измерениями без использования слоев Lambda и предоставления всех зависимостей в файле POM, что мы делали в статье Измерение холодных и теплых запусков с помощью Java 21 с использованием различных настроек памяти Lambda.

Измерение холодных и теплых запусков с помощью Java 21 с использованием слоя Lambda

В нашем эксперименте мы будем использовать пример приложения. По сути, в шаблоне AWS SAM определены две функции Lambda, которые одновременно отвечают на запросы API-шлюза и извлекают продукт по идентификатору, полученному от API-шлюза из DynamoDB. Одну лямбда-функцию GetProductByIdWithPureJava21LambdaWithCommonLayer можно использовать со SnapStart и без него, а вторая GetProductByIdWithPureJava21LambdaAndPrimingWithCommonLayer использует инициализацию вызова SnapStart и DynamoDB.

Зависимости, предоставляемые через уровень Lambda, имеют область действия, «предусмотренную» в файле pom.xml нашего приложения.

Чтобы прикрепить слой Lambda, созданный в статье Как создать публикацию и использовать слои для функций Lambda Java 21 для функций Lambda в шаблоне AWS SAM, нам нужно добавить параметр Layers в функцию Lambda следующим образом:

    Type: AWS::Serverless::Function
    Properties:
      FunctionName: GetProductByIdWithPureJava21LambdaWithCommonLayer
      AutoPublishAlias: liveVersion
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1
      Handler: software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest

Пожалуйста, замените ARN слоя (включая версию) на свой собственный, который является результатом команды публикации слоя (aws лямбда-версия-публикации).

Результаты эксперимента, приведенного ниже, были основаны на воспроизведении более 100 холодных и примерно 100 000 теплых запусков в ходе эксперимента, который длился примерно 1 час. Для этого (и экспериментов из моей предыдущей статьи) я использовал инструмент нагрузочного тестирования, но вы можете использовать любой инструмент, который захотите, например Serverless-artillery или Postman.
Я провел все эти эксперименты, предоставив нашим функциям Lambda 1024 МБ памяти и передав следующую опцию компиляции через переменную среды: JAVA_TOOL_OPTIONS: "-XX: TieredCompilation -XX:TieredStopAtLevel=1" (компиляция клиента без профилирования), что обеспечивает очень хорошую компромисс между холодным и теплым временем запуска.

В таблицах ниже я также приведу результаты наших измерений без использования слоев Lambda, взятых из статьи Измерение холодного и теплого старта с помощью Java 21 с использованием различных настроек памяти Lambda, чтобы напрямую сравнить их.
Аббревиатура c означает холодный старт, а w означает теплый старт.

Время холодного (c) и теплого (w) запуска без SnapStart в мс:

Эксперимент c стр.50 c стр.75 c стр.90 c стр.99 c стр.99.9 максимум стр50 w стр75 w стр90 w стр.99 w p99.9 макс
с общим лямбда-слоем 3497,91 3597,18 3695,58 3800,47 3908,33 4011,71 5,82 6,72 8.00 17,97 55,48 1709.13
без лямбда-слоя 3157,6 3213,85 3270,8 3428.2 3601.12 3725.02 5,77 6,50 7,81 20,65 90,20 1423,63

Время холодного (c) и теплого (w) запуска с SnapStart без заполнения в мс:

Эксперимент c стр.50 c стр.75 c стр.90 c стр.99 c стр.99.9 максимум стр50 w стр75 w стр90 w стр.99 w p99.9 макс
с общим лямбда-слоем 2047.12 2124.24 2439,49 2705,52 2735,43 2831,59 5,68 6.40 7,45 17.06 48,45 2139.74
без лямбда-слоя 1626,69 1741.10 2040,99 2219,75 2319,54 2321,64 5,64 6,41 7,87 21.40 99,81 1355.09

Время холодного (c) и теплого (w) запуска с SnapStart и с вызовом DynamoDB. Загрузка в мс:

Эксперимент c стр.50 c стр.75 c стр.90 c стр.99 c стр.99.9 максимум стр50 w стр75 w стр90 w стр.99 w p99.9 макс
с общим лямбда-слоем 713,88 766,38 1141,94 1181,41 1214,94 1215,32 5,59 6.30 7,39 16,39 45.09 574,61
без лямбда-слоя 702,55 759,52 1038,50 1169,66 1179.05 1179,36 5,73 6,51 7,87 21,75 92,19 328,41

Заключение

В этой статье мы создали приложение, используя уровень Lambda с общими зависимостями, а затем измерили время холодного и горячего запуска без включенного SnapStart, с включенным SnapStart, а также применили оптимизацию загрузки вызовов DynamoDB и сравнили результаты с нашими измерениями без использования Lambda. слоев и предоставление всех зависимостей в файле POM, что мы сделали в статье Измерение холодных и теплых запусков с помощью Java 21 с использованием различных настроек памяти Lambda.

Я несколько раз проводил измерения с использованием обычных слоев Lambda, чтобы действительно подтвердить результат моего эксперимента. Даже если у меня были некоторые отклонения в результатах между этими измерениями, тенденция всегда была одна и та же: при отключении SnapStart или включении его, но без использования первичного вызова DynamoDB, холодный запуск с использованием обычного Lambda Уровень был на несколько сотен миллисекунд выше по сравнению с упаковкой всех зависимостей только в файл POM. Только когда SnapStart был включен для функции Lambda и была применена подготовка вызова DynamoDB, холодные запуски при обоих подходах были очень близки, вероятно, из-за того, что все уже было в созданном снимке.

теплый запуск функции Lambda был довольно близким для обоих вариантов использования (с использованием слоев Lambda и без него), а также для всех экспериментов (с включенным SnapStart и без него) почти для всех процентилей, но я всегда получал более высокие результаты для максимального значения при использовании обычного слоя Lambda.

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/aws-builders/aws-snapstart-part-24-measuring-cold-and-warm-starts-with-java-21-using-lambda-layer-1- 4o8l? 1Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3