Настройка Yandex Cloud CDN при недоступности источника
- Как Cloud CDN работает при недоступности источника
- Включите кеширование на ресурсе
- Включите экранирование источников
- Подготовьте резервный источник
- Добавьте второй источник в группу
- Разрешите выдачу устаревшего контента, если это допустимо
- Выполните настройку до возникновения сбоя
- Проверьте работу резервного источника
Чтобы CDN-ресурс продолжал отдавать контент при недоступности основного источника, заранее включите кеширование, настройте экранирование источников и подключите резервный источник. Если приложение допускает использование старых версий файлов, дополнительно разрешите выдачу устаревшего контента из кеша.
Как Cloud CDN работает при недоступности источника
Контент пользователям отдается CDN-серверами, расположенными в разных географических точках присутствия. Недоступность дата-центра с источником контента сама по себе не означает остановку раздачи через CDN.
Если в CDN-ресурсе настроен только один источник и он стал недоступен, результат зависит от состояния кеша:
|
Состояние файла |
Что произойдет |
|
Файл есть в кеше обслуживающего CDN-сервера, срок кеширования не истек. |
Cloud CDN продолжит отдавать файл. |
|
Файла нет в кеше. |
Cloud CDN потребуется получить файл из источника или с экранирующего сервера, если экранирование включено. |
|
Срок кеширования истек. |
Cloud CDN потребуется обновить файл у источника. |
|
Срок кеширования истек, разрешена выдача устаревшего контента. |
Если выполнены условия опции |
|
Кеширование файла отключено. |
Для получения файла потребуется доступный источник при каждом запросе пользователя. |
Если файла нет в кеше, а источник недоступен, пользователь получит ошибку. При тайм-ауте это может быть ошибка 504 Gateway Timeout, при других сбоях код может отличаться.
Примечание
Кеш каждой точки присутствия формируется отдельно. Наличие файла на одном CDN-сервере не гарантирует, что он есть на остальных. Подробнее — в разделе Кеширование контента.
Чтобы повысить отказоустойчивость ресурса:
- Включите кеширование на ресурсе.
- Включите экранирование источников.
- Подготовьте резервный источник.
- Добавьте второй источник в группу.
- Разрешите выдачу устаревшего контента, если это допустимо.
- Выполните настройку до возникновения сбоя.
- Проверьте работу резервного источника.
Включите кеширование на ресурсе
- В консоли управления
выберите каталог, в котором расположен ресурс, и перейдите в сервис Cloud CDN. - Нажмите на имя нужного ресурса.
- Перейдите на вкладку Кеширование и нажмите Редактировать.
- В блоке CDN включите опцию Кеширование в CDN.
- Выберите тип настроек: Как у источника или Свои настройки. Задайте время жизни кеша.
- Нажмите Сохранить.
Подробные шаги приведены в инструкции по настройке кеширования.
Совет
Проверьте, что нужные файлы действительно кешируются. Для проверки используйте заголовок ответа Cache-Status от Cloud CDN: значение HIT означает, что файл был отдан из кеша.
На кеширование влияют настройки ресурса и заголовки ответов источника. Кеширование в браузере настраивается отдельно и не заменяет кеширование на CDN-серверах.
Если кеширование отключено или конкретный файл не кешируется, Cloud CDN будет обращаться к источнику при каждом запросе такого файла. Выбирайте время жизни кеша с учетом частоты обновления контента.
Включите экранирование источников
Экранирование добавляет промежуточный уровень кеша между CDN-серверами и источниками. Если файла нет в кеше обслуживающего CDN-сервера, запрос сначала поступает на экранирующий сервер. Если там есть подходящая кешированная копия, обращаться к источнику не потребуется.
Экранирующий сервер также объединяет повторяющиеся запросы к одному файлу. Это сокращает количество загрузок одинакового контента из источника и снижает нагрузку на него.
Экранирование может существенно повысить эффективность кеширования, особенно когда одни и те же файлы запрашивают пользователи через разные точки присутствия. Результат зависит от характера запросов и настроек кеша. Подробнее — в разделе Экранирование источников.
Чтобы включить экранирование:
- Откройте нужный ресурс в Cloud CDN.
- Перейдите на вкладку Экранирование источников.
- Нажмите Включить, выберите доступную локацию и подтвердите включение.
- Убедитесь, что статус изменился на
Active.
Применение настроек может занять до 15 минут.
Важно
Экранирование оплачивается отдельно: в день включения списывается плата за полный месяц.
Подробнее — в инструкции по включению экранирования.
Экранирование дополняет резервирование источников. Если нужной копии нет ни в кеше CDN-сервера, ни на экранирующем сервере, для получения файла все равно потребуется доступный источник.
Подготовьте резервный источник
Для получения файлов при недоступности основного источника нужен второй источник с копией контента.
Для виртуальных машин можно использовать другую зону доступности. Если требуется защита от недоступности облачного сервиса целиком, разместите резервный источник в другом облаке или независимой инфраструктуре.
Примечание
Дублирующий бакет в Object Storage не следует считать независимым резервом на случай отказа всего сервиса.
Перед подключением резервного источника проверьте, что:
- Нужные файлы доступны по тем же путям, что и на основном источнике.
- Копии файлов актуальны.
- Источник доступен для Cloud CDN с учетом сетевых ограничений и прав доступа. Используйте актуальный список сетей Cloud CDN. Если включено экранирование, список сетей экранирующих серверов можно получить в технической поддержке
. - Настройки протокола, TLS-сертификата для HTTPS и заголовка
Hostподходят обоим источникам. - Резервный источник выдержит нагрузку при отказе основного.
Совет
Для разных бакетов особенно важно проверить заголовок Host: значение, подходящее одному бакету, может не подходить другому. Возможные варианты организации такой схемы описаны в разделе Заголовок Host.
Добавьте второй источник в группу
В консоли управления
Доступны следующие варианты:
|
Приоритеты |
Работа с источниками |
|
Основной и основной |
Запросы к источникам распределяются по кругу (round-robin). Оба источника участвуют в обслуживании. |
|
Основной и резервный |
Cloud CDN обращается к основному источнику. При ошибке, для которой предусмотрен повтор, запрос отправляется на резервный. |
В режиме round-robin отдельные запросы распределяются между источниками. Один файл не загружается одновременно с двух источников. Подробнее — в разделе Источники и их группы.
Примечание
Для описанной схемы переключение предусмотрено при ошибках соединения, тайм-аутах и ответах с HTTP-кодами 500, 502, 503, 504. Ответы 403 и 404 не являются основанием для такого переключения. Например, отсутствие файла на основном источнике не означает, что Cloud CDN автоматически попробует найти его на резервном.
После настройки подключите группу к CDN-ресурсу.
Применение настроек на CDN-серверах может занимать до 15 минут. Дождитесь их распространения и проверьте работу резерва. При переключении время ответа может увеличиться из-за ожидания ответа от основного источника.
Разрешите выдачу устаревшего контента, если это допустимо
Для некоторых типов контента старая версия файла предпочтительнее ошибки. В таком случае можно разрешить Cloud CDN отдавать сохраненную копию после истечения срока кеширования, если источник недоступен.
С помощью API это настраивается в параметре CDN-ресурса options.stale. Пример фрагмента настроек:
{
"options": {
"stale": {
"enabled": true,
"value": [
"error",
"timeout",
"http_500",
"http_502",
"http_503",
"http_504"
]
}
}
}
Пример разрешает выдачу устаревшего контента при сетевой ошибке, тайм-ауте и перечисленных HTTP-кодах.
Для нового ресурса используйте метод REST API create для Resource или вызов gRPC API ResourceService/Create. Для существующего ресурса — метод REST API update для Resource или вызов gRPC API ResourceService/Update.
Пример изменения CDN-ресурса с помощью curl
export IAM_TOKEN=$(yc iam create-token)
curl \
--request PATCH \
--header "Authorization: Bearer $IAM_TOKEN" \
--header "Content-Type: application/json" \
--url 'https://cdn.api.yandexcloud.kz/cdn/v1/resources/<идентификатор_ресурса>' \
--data '{
"options": {
"stale": {
"enabled": true,
"value": [
"error",
"timeout",
"http_500",
"http_502",
"http_503",
"http_504"
]
}
}
}'
Информация про IAM-токен и идентификатор CDN-ресурса приведена на следующих страницах:
Примечание
Выдача устаревшего контента возможна только при наличии сохраненной копии в кеше. Если файл не был закеширован или уже удален, потребуется доступный источник.
Условия выдачи устаревшего контента и условия переключения на резервный источник настраиваются отдельно. Добавление кода ошибки в stale само по себе не включает переключение на резервный источник по этому коду.
Выполните настройку до возникновения сбоя
В случаях сбоев могут быть недоступны не только источники, но и операции управления Cloud CDN: просмотр ресурсов, изменение настроек, очистка и предзагрузка кеша.
Добавьте резервный источник заранее и дождитесь применения настроек. Тогда при сбое основного источника Cloud CDN сможет автоматически обращаться к резервному. Вам не придется менять настройки, если консоль управления или API будут недоступны.
Важно
Не очищайте кеш при недоступных источниках без необходимости. После очистки Cloud CDN потеряет сохраненные копии, а получить их заново может не получиться.
Проверьте работу резервного источника
Проверку выполняйте на отдельном тестовом CDN-ресурсе. Его можно создать на основе рабочего ресурса с помощью копирования конфигурации. Копирование доступно внутри одного каталога. Для нового ресурса потребуется отдельное доменное имя и соответствующая ресурсная запись типа CNAME.
- Разместите одинаковые тестовые файлы на основном и резервном источниках.
- В тестовом ресурсе укажите резервный источник рабочего ресурса как единственный основной источник. Используйте отдельную группу источников, чтобы не изменять группу рабочего ресурса.
- Дождитесь применения настроек.
- Выполните через тестовый CDN-ресурс тот же запрос, что и через рабочий: сохраните путь к файлу, query-параметры, HTTP-метод и необходимые заголовки. Замените только доменное имя CDN-ресурса на тестовое. Перед проверкой убедитесь, что ответ не отдается из ранее заполненного кеша тестового ресурса или экранирующего сервера.
- Сравните HTTP-код, содержимое и значимые заголовки ответа с рабочим ресурсом.
- По логам резервного источника подтвердите, что запрос дошел до него.
Такая проверка подтверждает, что резервный источник доступен для Cloud CDN и способен отдавать нужный контент.
Чтобы дополнительно проверить автоматическое переключение, создайте отдельную группу с двумя тестовыми источниками и приоритетами «Основной» и «Резервный». Подключите ее к тестовому CDN-ресурсу и дождитесь применения настроек. На тестовом основном источнике сымитируйте одну из ошибок, при которых предусмотрено переключение, например ответ 503. Запросите файл, которого еще нет в кеше CDN-серверов и экранирующего сервера, и по логам тестового резервного источника подтвердите, что запрос дошел до него. После проверки восстановите работу тестового основного источника.