Что является причиной задержки холодного запуска в AWS Lambda? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть лямбда-функция, написанная на Java, доступ к которой осуществляется через API Gateway. В сценариях «холодного старта» фактическому коду требуется 1,5 секунды для завершения выполнения (проверено из журналов Cloudwatch), но для получения окончательного ответа в API Gateway требуется более 10 секунд. Это раздражает.

Я собрал рентгеновские трассировщики для сценариев холодного и горячего старта.

Может кто-нибудь помочь мне в решении этой проблемы производительности?

Холодный старт: Cold Start

Горячий старт: Hot Start

Ответы [ 5 ]

0 голосов
/ 24 января 2019

Следует также отметить, что выбранное вами время выполнения также влияет на холодный запуск.

Среда выполнения Java имеет самый длинный холодный запуск, а среда выполнения Python имеет самый короткий.

https://medium.com/@nathan.malishev/lambda-cold-starts-language-comparison-%EF%B8%8F-a4f4b5f16a62

0 голосов
/ 24 января 2019

Хитрость здесь заключается в том, чтобы червить вашу функцию либо с помощью поддельного вызова (программы schedler), либо с помощью плагинов, таких как lambda warmer.

Примечание: Лямбда-дизайн предназначен для обработки событий, а не для реального веб-приложения. Если вы сохраняете лямбду-червя, вы получите такую ​​же цену, как EBS или EC2.

Если ваш сценарий использования требует миллисекунды, выбирайте компьютер или кубернетику.

0 голосов
/ 24 января 2019

Возможное решение для устранения холодных запусков, написанных на Java: Добавление большего объема памяти для лямбды, а также еще один подход для уменьшения холодных запусков: используйте инструмент Graal native-image. Баночка переводится в байт-код. По сути, мы будем выполнять часть работы, которая выполняется на AWS. Когда вы создаете свой код, при загрузке в AWS - выберите «Custom runtime», а не java8.

Полезная статья: https://engineering.opsgenie.com/run-native-java-using-graalvm-in-aws-lambda-with-golang-ba86e27930bf

Внимание:

но оно также имеет свои ограничения; он не поддерживает динамическую загрузку классов, а поддержка отражений также ограничена

0 голосов
/ 24 января 2019

Здесь есть два пути вперед: а) Как говорили другие, увеличьте память. б) Отправьте запрос в функцию лямбда-функции для ее прогрева, и поскольку лямбда-контейнеры AWS не имеют длительного срока службы, вам придется делать это довольно часто.

Есть несколько факторов, которые могут способствовать длительному прогреву: а) Если лямбда находится в vpc, присоединение ENI может занять некоторое время. б) HTTPS звонки в вашей лямбде.

Под крышкой находится контейнер с лямбдой. Срок службы этого контейнера не очень велик, и каждый раз, когда он запускается, первоначальному запросу требуется некоторое время, чтобы прогреть контейнер. Дело в том, что вы не можете избежать холодных запусков, они всегда будут происходить. Я лично обнаружил, что при написании Java очень заметно, что первоначальный запрос всегда занимает намного больше времени.

Есть действительно хороший пост в блоге о том, как избежать холодного старта здесь , но я уверен, что вы уже прочитали его.

0 голосов
/ 31 октября 2018

Холодные запуски случаются, когда вы некоторое время не запускаете работу с лямбда-функцией. Амазонка просто закрывает контейнер, содержащий ваш код. Замедление, которое вы видите, - это просто время, потраченное amazon на пробуждение контейнера, загрузку вашей лямбда-функции (может потребоваться больше времени, если вы используете технологию статического кода, такого как Java, должно быть медленнее с JS, например) и ее фактический запуск ( что кажется в вашем случае незначительным по сравнению со всем временем работы амазонки).

Взгляните на этот интересный пост в блоге о лямбда-холодах: https://medium.com/thundra/dealing-with-cold-starts-in-aws-lambda-a5e3aa8f532

...