Могу ли я использовать CDN netlify для предотвращения лямбда-выполнения чаще, чем раз в день? - PullRequest
0 голосов
/ 06 февраля 2019

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

Чтобы проверить это, я написал простую лямбда-функцию:

exports.handler = function(event, context, callback) {
  callback(null, {
    statusCode: 200,
    body: new Date().toString(),
    headers: {
      'Cache-Control': 'public, s-maxage=86400',
    },
  });
};

При повторном вызове конечной точки через 10 секунд я получаю то же самое время в ответе, поэтому body,показывая, что ответ действительно был кеширован.Но при вызове его с двух разных устройств (мой компьютер и мой телефон 4G, поэтому разные IP-адреса и интернет-провайдеры), я получаю разные даты, как если бы каждое устройство получало разный кешированный ответ, и я вижу на информационной панели Netlify, что лямбда былавызывается дважды.

Есть ли что-то, чего я не понимаю в том, как работает CDN Netlify?Есть ли способ добиться того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 06 февраля 2019

Отказ от ответственности: я работаю на Netlify и отвечу вам тем же в справочной службе.

Короткий ответ: нет, вы не можете сделать это так, как намереваетесь, и да, тамВероятно, есть некоторые вещи о CDN, которые вы не понимаете.Читайте дальше, чтобы узнать:)

Ваша интуиция по настройке заголовка Cache-control правильна в том, как повлиять на кеширование Netlify, и должна делать то, что вы пытаетесь делать!Тем не менее, его эффекты будут ограничены одним узлом CDN, и Netlify имеет десятки узлов CDN (и несколько отдельных CDN, но это не здесь).

Каждый узел CDN обрабатывает свое собственное кэширование,поэтому, пока ответ кэшируется (в данном случае на один день), он кэшируется только на одном узле CDN.Ваш телефон и компьютер, или даже ваш компьютер и один и тот же компьютер через 1 секунду могут общаться с другим узлом CDN при каждой загрузке страницы из-за способа, которым Netlify управляет балансировкой нагрузки.

Итак, чего бы достигла ваша реализацияне обязательно «возвращать кэшированное содержимое в секунду + загрузка в течение следующих 24 часов», но «извлекать содержимое не чаще, чем # of CDN nodes Netlify has in rotation раз в день, если содержимое используется постоянно».Это условие «используется постоянно» звучит странно - но Netlify запускает кэширующий CDN и не имеет неограниченной емкости кеша, поэтому ваши результаты могут не оставаться в кеше в течение целого дня, если будет запрошено достаточно другого контента.

Если вы хотите достичь своей заявленной цели - загружать данные только один раз в день из API - вы должны загрузить их в какое-то постоянное место и извлечь их оттуда в своей функции.

Но я думаю, что на самом деле ваша цель - избежатьпостоянно обновлять данные ", и ваша реализация должна работать для этой цели.:)

...