Чем полезен TTL 0 в CloudFront?

80

Несколько недель назад Amazon объявил о снижении срока хранения контента:

Amazon CloudFront сокращает минимальный срок действия контента

Настолько много, что теперь вы можете установить TTL в CloudFront на 0. Итак, мой вопрос: почему может быть полезно иметь дистрибутив CloudFront с TTL, установленным на 0. Для меня это означает полное отсутствие кеширования, поэтому каждый запрос, который попадает в CloudFront в конечном итоге попадет в начало координат.

Что мне не хватает?

Jatorre
источник

Ответы:

167

Эта новая функция Amazon CloudFront на самом деле чрезвычайно полезна для многих случаев использования, потому что обращение к источнику работает несколько иначе, чем кажется на первый взгляд, и не обязательно является проблемой, наоборот; Хотя эта функция уже была выпущена ранее, все это идет вместе с недавним выпуском Amazon CloudFront - Поддержка динамического содержимого , например, для ответа на вопрос:

Переменное время жизни (TTL) - во многих случаях динамический контент либо не кэшируется, либо не кэшируется на очень короткий период времени, возможно, всего несколько секунд. Раньше минимальный TTL CloudFront составлял 60 минут, так как весь контент считался статическим. Новое минимальное значение TTL составляет 0 секунд. Если вы установите TTL для определенного источника равным 0, CloudFront все равно будет кэшировать контент из этого источника. Затем он выполнит запрос GET с заголовком If-Modified-Since , тем самым дав источнику возможность сообщить, что CloudFront может продолжать использовать кэшированный контент, если он не изменился в источнике . [курсив мой]

Другими словами, использование TTL, равного 0, в первую очередь означает, что CloudFront делегирует полномочия на управление кешем источнику, т. Е. Исходный сервер решает, кэширует ли объекты и на какой срок CloudFront; обратите внимание, в частности, что запрос GET с заголовком If-Modified-Since не обязательно означает, что сам объект извлекается из источника, скорее источник может (и должен) вернуть код состояния HTTP 304 - Не изменен, где это применимо :

Указывает, что ресурс не изменялся с момента последнего запроса. [...] Использование этого экономит полосу пропускания и повторную обработку как на сервере, так и на клиенте, так как должны быть отправлены и получены только данные заголовка по сравнению со всей страницей, повторно обрабатываемой сервером, а затем отправленной снова с использованием большей пропускной способности сервера и клиента. [курсив мой]

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

Понимание того, как все эти части работают вместе может быть немного трудно на самом деле, соответственно , таблица в разделе Задание минимального времени , что CloudFront кэши Объекты для скачивания Распределения в Указание Как долго объекты остаются в CloudFront Край Cache (Истечение Object) попытки суммированы эффекты при применении в контексте CloudFront с TTL = 0 или без него.

Штеффен Опель
источник
3
Это фантастический ответ. Понял!
jatorre
3
Спасибо, Штеффен! Абсолютно подробный и хорошо написанный ответ. AWS следует поместить это в свои ДОКУМЕНТЫ !!! ха!
asherrard
2
Очень хорошо объяснено. Шутки в сторону. +10 за простоту и используемую терминологию.
Шивкумар Маллесаппа
5

Обратите внимание, что Amazon не говорит «TTL равен 0», он говорит: «Минимальный TTL равен 0». а это совсем другое. Приведенное выше описание очень желательно, но нет гарантии, что Cloudfront действительно это сделает.

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

Итак, я думаю, что фраза «Минимальный TTL равен 0», вероятно, больше похожа на «Amazon не имеет строгого намерения хранить это в кеше» и, возможно, «и будет часто обновляться».

Для таких приложений, как CMS, где пользователь размещает новый контент, я думаю, что TTL-0 все еще недостаточно. Вам все равно придется либо вызывать недействительность из CMS, либо использовать разные пути для разных номеров версий.

Polx
источник
2

CloudFront можно использовать в сочетании с диспетчером сертификатов для добавления поддержки HTTPS на веб-сайты S3. Вы можете захотеть этого, но без кеширования.

nathan-cloudright.co.uk
источник