6

Я реализовал функцию AWS Lambda с использованием Serverless Framework. Эта функция Lambda использует RDS и MongoDB. Конечная точка MongoDB работает около 500 мс, но RDS работает на 12 секунд (холодный старт) и ~ 3 сек (горячий старт).AWS Lamba с плохой производительностью при использовании RDS

Примечание: Я использую Sequelize в этой конечной точке.

Как ускорить мой конечный пункт RDS Lambda?

ответ

8

На первой строке после вашего определения функций модуля, добавьте следующую строку

context.callbackWaitsForEmptyEventLoop = false; 

callbackWaitsForEmptyEventLoop

  • Значение по умолчанию верно
  • Полезно только для изменения поведения по умолчанию обратный вызов.

Вы можете установить для этого свойства значение false, чтобы запросить AWS Lambda, чтобы заморозить процесс вскоре после вызова callback, даже если в цикле событий есть события. AWS Lambda заморозит процесс, любые данные состояния и события в цикле событий Node.js (любые оставшиеся события в цикле событий, обработанные при вызове функции Lambda next, и если AWS Lambda решит использовать замороженный процесс)

подробнее читайте this статью

+0

@alish, вы отметили это как правильный ответ. Не могли бы вы поделиться, насколько это улучшилось в производительности? У вас было 3 сек - 12 сек, что у тебя сейчас? – Zanon

0

Вы можете использовать старую context.done функцию, чтобы немедленно вернуться или более конкретно context.succeed/context.fail. Эта функция по-прежнему доступна на узле 4.

Хотя он не прерывает работу Lambda, но дает ответ вызывающему абоненту (например, Gateway API) и продолжает работать на фоне, если необходимо, не более ~ 15 секунд.

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

+0

У вас есть документация, подтверждающая ваш ответ? Я не могу найти. Я думал, что все, что осталось в цикле событий, будет запущено при следующем вызове. – Alex

+0

Какая часть? Контекстные функции были частью Модели программирования Лямбды AWS (http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html#nodejs-prog-model- oldruntime-context-methods), но, хотя он устарел, он все еще существует для обратной совместимости, и вы можете проверить это. Задержка 'setTimeout' - это недокументированные мелочи. –