Следует помнить одну вещь: если ваша служба общедоступна и вас интересует оценка Google Insights, вы должны быть осторожны при реализации такого подхода.

м проекте есть REST API, который реализован на AWS API Gateway и AWS Lambda. Поскольку функции AWS Lambda не содержат сервера и не сохраняют состояние, а мы делаем вызов, AWS запускает контейнер с кодом функции Lambda, которая обрабатывает наш вызов. В соответствииДокументация AWS После завершения выполнения лямбда-функции AWS не останавливает контейнер, и мы можем обработать следующий вызов в этом контейнере. Такой подход повышает производительность сервиса - только во время первого вызова AWS тратит время на запуск контейнера (холодный запуск функции Lambda), и все последующие вызовы выполняются быстрее, потому что они используют один и тот же контейнер (теплый запуск).

В качестве следующего шага для повышения производительности мы создали задачу cron, которая периодически вызывает нашу функцию Lambda (для этого мы используем правила Cloudwatch). Такой подход позволяет сохранить функцию Lambda «теплой», что позволяет избежать остановки и перезапуска контейнеров. То есть когда реальный пользователь вызовет наш REST API, Lambda не будет тратить время на запуск нового контейнера.

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос