Подтвердить что ты не робот

Amazon CloudFront Latency

Я экспериментирую с AWS S3 и CloudFront для веб-приложения, которое я разрабатываю.

В приложении я разрешаю пользователям загружать файлы в ведро S3 (используя AWS SDK) и сделать его доступным через CloudFront CDN, но проблема даже в том, что файлы загружаются и готовятся в ведро S3, которое требуется минута или 2, которые будут доступны в URL-адресе CloudFront CDN, это нормально?

4b9b3361

Ответ 1

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

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

По умолчанию, когда ваше начало возвращает код состояния HTTP 4xx или 5xx, CloudFront кэширует эти ответы об ошибках в течение пяти минут, а затем отправляет следующий запрос для объекта в исходное состояние, чтобы узнать, была ли устранена проблема, вызвавшая ошибку и запрошенный объект теперь доступен.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

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

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

Вы можете указать продолжительность кэширования ошибок - Ошибка кэширования ошибок TTL - для каждого кода состояния 4xx и 5xx, который кэширует CloudFront. Для процедуры см. Настройка поведения ответа на ошибку.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html


Чтобы настроить это в консоли:

  • При просмотре конфигурации распространения перейдите на вкладку Error Pages.

  • Для каждой ошибки, в которой вы хотите настроить синхронизацию, начните с нажатия Create Custom Error Response.

  • Выберите код ошибки, который вы хотите изменить, из раскрывающегося списка, например 403 (Запрещено) или 404 (не найдено). Конфигурация вашего bucket определяет, какой код S3 возвращает для отсутствующих объектов, поэтому, если вы не уверены, измените 403, повторите процесс и измените значение 404.

  • Установите Error Caching Minimum TTL (seconds) в 0

  • Оставьте Customize Error Response установленным на No (если установлено значение Yes, этот параметр позволяет настраивать пользовательский контент ответа на ошибки, чего вы не хотите. Активация этой опции выходит за рамки этого вопроса. )

  • Нажмите Create. Это вернет вас к предыдущему виду, где вы увидите Error Caching Minimum TTL для кода, который вы только что определили.

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

Когда вы внесете все необходимые изменения, вернитесь на главный экран консоли CloudFront, где перечислены дистрибутивы. Подождите, пока состояние распределения изменится с In Progress на Deployed (обычно около 20 минут, чтобы изменения были вытолкнуты ко всем краям) и тест.

Ответ 2

Являются ли эти новые файлы записаны на S3 в первый раз или они обновляются в существующих файлах? S3 обеспечивает согласованность чтения и записи для новых объектов, и, учитывая модель вытаскивания CloudFront, вы не должны иметь эту проблему с новыми файлами, написанными на S3. Если да, то я бы открыл билет с AWS.

Если это обновления существующих файлов, то у вас есть как S3 в конечном итоге, так и срок действия кэша CloudFront. Оба из них могут вызывать подобное поведение.