Какое время ожидания для простого кэширования в AWS Lambda? - PullRequest
0 голосов
/ 22 июня 2019

Итак, я нашел решения для кэширования своих функций AWS Lambda и обнаружил нечто, называемое «Простое кэширование».Это идеально подходит для того, что я хочу, так как мои данные меняются не часто.Однако одна вещь, которую я не смог найти, что такое тайм-аут для этого кэша.Когда данные обновляются функцией, и есть ли способ контролировать их?

Пример кода, который я использую для функции:

let cachedValue;

module.exports.handler = function(event, context, callback) {
    console.log('Starting Lambda.');

    if (!cachedValue) {
        console.log('Setting cachedValue now...');
        cachedValue = 'Foobar';
    } else {
        console.log('Cached value is already set: ', cachedValue);
    }
};

1 Ответ

1 голос
/ 22 июня 2019

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

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

Если выполняется два или более вызовов одной и той же функцииодновременно они не будут находиться в одном контейнере и не будут видеть глобальные переменные друг друга.Это не делает его недопустимым, но вы должны знать об этом.Каталог /tmp/ будет демонстрировать очень похожее поведение, поэтому вам нужно его очистить при использовании.

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

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

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

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

См. также https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/ - пост, которому несколько лет, но он все еще точен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...