Экземпляры AWS Java Lambda JVM

Предположим, у меня есть одна лямбда-функция AWS

**String lambdaFunction1() {
//some processing 
}**

Допустим, lambdaFunction1 срабатывает при любом новом сообщении в теме SNS. Сколько экземпляров JVM будет запущено для 10 сообщений SNS?

Выполняет ли лямбда-выражение AWS каждую лямбда-выражение в своей собственной JVM или повторно использует одни и те же экземпляры JVM.


person JavaGeek_101    schedule 01.03.2018    source источник
comment
Какая разница для вас?   -  person Kayaman    schedule 01.03.2018
comment
1. это нужно для понимания того, как это работает 2. это поможет в проектировании пула соединений, когда мы обращаемся к dB   -  person JavaGeek_101    schedule 01.03.2018
comment
Следующая запись в блоге дает хорошее представление о том, как AWS повторно использует свои контейнеры: aws.amazon.com/de/blogs/compute/container-reuse-in-lambda Я не думаю, что вы можете сказать, сколько экземпляров JVM создано, и, честно говоря, вы также не должны беспокоиться об этом .   -  person Ben    schedule 01.03.2018
comment
это необходимо для понимания того, как AWS поддерживает JVM, и, во-вторых, это поможет в разработке пула соединений с БД в лямбда-выражении.   -  person JavaGeek_101    schedule 01.03.2018
comment
Спасибо, Бен за вдумчивый ответ.   -  person JavaGeek_101    schedule 01.03.2018
comment
Пул соединений с БД в Lambda? Вы уверены, что?   -  person Kayaman    schedule 01.03.2018
comment
Пожалуйста, не обращайте внимания, я подумал, если минимизировать время лямбда-загрузки, если я могу поместить это в какую-то глобальную зону   -  person JavaGeek_101    schedule 01.03.2018


Ответы (1)


Цитата https://aws.amazon.com/de/blogs/compute/container-reuse-in-lambda/

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

Однако, если вы не меняли код и прошло не так много времени, Lambda может повторно использовать предыдущий контейнер. Это дает некоторые преимущества в производительности для обеих сторон: Lambda может пропустить инициализацию языка nodejs, и вы можете пропустить инициализацию в своем коде. Файлы, которые вы записали в / tmp в прошлый раз, останутся там, если песочница будет повторно использована.

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

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

Или, чтобы упростить: AWS, вероятно, знает, что делать, чтобы ваши Lambdas были как можно более эффективными, поэтому вам, вероятно, не стоит переоценивать это.

Кроме того, хотя этот блог нацелен на Node.js, AWS, похоже, делает что-то подобное для Java на основе это сообщение.

person Ben    schedule 01.03.2018
comment
И один из ключевых выводов заключается в том, что ваша лямбда не должна сохранять состояние ни в памяти, ни на диске, поскольку в противном случае повторное выполнение в одном и том же экземпляре приведет к проблемам. - person luk2302; 01.03.2018
comment
Хорошо, это означает, что каждый экземпляр лямбда - это один контейнер. спасибо за понимание - person JavaGeek_101; 01.03.2018