Руководство по сетям доставки содержимого

Хранилище Azure
хранилище BLOB-объектов Azure

Сеть доставки содержимого (CDN) — это распределенная сеть серверов, которые могут эффективно доставлять веб-содержимое пользователям. Сети CDN хранят кэшированное содержимое на пограничных серверах, расположенных рядом с пользователями, чтобы свести к минимуму задержки.

Обычно CDN применяются для доставки статического содержимого: изображений, таблиц стилей, документов, клиентских скриптов и HTML-страниц. В числе основных преимуществ CDN — низкая задержка и скорость доставки содержимого всем пользователям независимо от географического расстояния от центра обработки данных, в котором размещено приложение. Кроме того, CDN помогают снизить нагрузку на веб-приложение, избавляя его от запросов на получение содержимого, размещенного в CDN.

Схема сети CDN

Сеть доставки содержимого Azure предлагает глобальное решение CDN для доставки содержимого, требующего высокой пропускной способности, размещенного в Azure или любом другом расположении. С помощью Azure сеть доставки содержимого можно кэшировать общедоступные объекты, загруженные из хранилища BLOB-объектов Azure, веб-приложения, виртуальной машины, любого общедоступного веб-сервера.

В этой статье описываются некоторые общие рекомендации и советы по использованию CDN. Дополнительные сведения см. в документации по Azure CDN.

Как и для чего используется CDN

К типичным случаям использования CDN относятся:

  • Доставка статических ресурсов для клиентских приложений, часто с веб-сайта. Это могут быть изображения, таблицы стилей, документы, файлы, клиентские скрипты, HTML-страницы, фрагменты HTML или любое другое содержимое, которое серверу не нужно изменять по каждому запросу. Приложение может создавать элементы во время выполнения и предоставлять их в сеть CDN (например, путем создания списка текущих новостей), но оно делает это не для каждого запроса.

  • Доставка общедоступного статического и общего содержимого на устройства, например мобильные телефоны и планшетные компьютеры. Само приложение является веб-службой, которая предоставляет доступ к API клиентам, запущенным на разных устройствах. CDN также может доставлять статические наборы данных (через веб-службу) для использования клиентами, в том числе для создания пользовательского интерфейса клиента. Например, CDN можно использовать для распределения документов JSON или XML.

  • Предоставление веб-сайтов целиком (при условии, что они состоят только из общедоступного статического содержимого) клиентам без необходимости использовать выделенные вычислительные ресурсы.

  • Потоковая передача видеофайлов в клиент по запросу. Видео передаются с низкой задержкой и по надежному подключению, доступному из центров обработки данных, расположенных по всему миру, которые предлагают подключения к сети CDN. Cлужбы мультимедиа Microsoft Azure интегрируется с Azure сеть доставки содержимого для доставки содержимого непосредственно в CDN для дальнейшего распространения. Дополнительные сведения см. в статье Общие сведения о конечных точках потоковой передачи.

  • Оптимизация взаимодействия для пользователей, особенно для тех, кто находится далеко от центра обработки, в котором размещено приложение. В противном случае такие пользователи могут испытывать большие задержки. Большой объем содержимого в веб-приложении часто является статическим, а использование CDN поможет поддерживать производительность и общее качество взаимодействия с пользователями на нужном уровне, исключая при этом необходимость развертывания приложения в нескольких центрах обработки данных. Список расположений узлов azure сеть доставки содержимого см. в разделе "Расположения POP Azure CDN".

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

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

Сложности

Если вы намерены применить CDN, не забудьте учесть некоторые сложности.

  • Развертывание. Определите источник, из которого CDN получает содержимое, а также решите, нужно ли развертывать содержимое больше, чем в одной системе хранения данных. Учтите все процессы развертывания статического содержимого и ресурсов. Например, вам может понадобиться выполнить отдельное действие по загрузке содержимого в хранилище BLOB-объектов Azure.

  • Управление версиями и кэшем. Выберите способы обновления статического содержимого и развертывания новых версий. Выясните, как в выбранной CDN выполняется кэширование и контроль срока жизни (TTL). Сведения о работе сеть доставки содержимого Azure см. в статье "Как работает кэширование".

  • Тестирование. Выполнение локального тестирования параметров CDN при разработке и тестировании приложения локально или в промежуточной среде может представлять сложности.

  • Оптимизация для поисковых систем (SEO). Содержимое, например изображения и документы, передаются из другого домена при использовании CDN, что может повлиять на SEO для этого содержимого.

  • Безопасность содержимого. Не все CDN предлагают хоть какой-то метод управления доступом к содержимому. Некоторые службы CDN, включая Azure сеть доставки содержимого, поддерживают проверку подлинности на основе маркеров для защиты содержимого CDN. Подробнее см. в статье Защита ресурсов сети доставки содержимого Azure с помощью аутентификации на основе маркеров.

  • Безопасность клиента. Клиенты могут подключаться из среды, которая не разрешает доступ к ресурсам в CDN. Это может быть среда с правилами безопасности, которая предоставляет доступ только к набору известных ресурсов или которая предотвращает загрузку ресурсов из любого расположения, кроме исходной страницы. В таких случаях требуется выполнить откат.

  • Устойчивость. CDN — это потенциальная единая точка отказа для приложения.

Сценарии, в которых сеть CDN может быть менее эффективной:

  • Если содержимое используется редко, к нему выполняется мало обращений, пока оно остается действительным (в зависимости от указанного срока жизни).

  • Если данные являются конфиденциальными, например в больших организациях или экосистемах цепочки поставок.

Общие инструкции и рекомендации

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

Развертывание

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

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

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

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

Рассмотрите возможности для сжатия файлов, например с помощью gzip (GNU zip). Сжатие может выполняться на сервере-источнике службой размещения веб-приложения или на пограничных серверах самой CDN. Подробнее см. в статье Повышение производительности за счет сжатия файлов в Azure CDN.

Маршрутизация и управление версиями

Вы можете использовать разные экземпляры CDN в разные моменты времени. Например, при развертывании новой версии приложения можно использовать новую сеть CDN, а старую сеть CDN (вместе с содержимым в старом формате) оставить для предыдущих версий. Если вы используете хранилище больших двоичных объектов Azure в качестве источника содержимого, вы можете создать отдельную учетную запись хранения или отдельный контейнер и указать его в качестве конечной точки CDN.

Не используйте строку запроса для указания разных версий приложения в ссылках на ресурсы CDN, так как при получении содержимого из хранилища BLOB-объектов Azure строка запроса является частью имени ресурса (имени большого двоичного объекта). Это может повлиять на способ кэширования ресурсов клиентом.

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

Доступ к содержимому CDN можно ограничивать по странам или регионам. Azure сеть доставки содержимого позволяет фильтровать запросы на основе страны или региона происхождения и ограничивать доставленное содержимое. Дополнительные сведения см. в статье Ограничение доступа к содержимому по странам или регионам.

управление кэшем;

Выберите способ управления кэшированием в системе. Например, в Azure сеть доставки содержимого можно задать глобальные правила кэширования, а затем настроить настраиваемое кэширование для определенных конечных точек источника. Вы также можете управлять кэшированием в CDN, отправляя заголовки с директивами кэша.

Дополнительные сведения см. в статье Как выполняется кэширование.

Чтобы запретить доступ к объектам через CDN, можно удалить эти объекты из источника, удалить или отключить конечную точку CDN, а при использовании хранилища BLOB-объектов — сделать контейнер или большой двоичный объект закрытым. Однако элементы не удаляются из CDN до истечения срока действия. Если потребуется, конечную точку CDN можно очистить вручную.

Безопасность

CDN может доставлять содержимое по протоколу HTTPS (SSL), используя предоставленный CDN сертификат, а также по стандартному протоколу HTTP. Чтобы избежать предупреждений браузера о смешанном содержимом, следует применять HTTPS для запроса статического содержимого на тех страницах, которые были получены по протоколу HTTPS.

Если вы используете CDN для передачи статических активов, таких как файлы шрифтов, некоторые проблемы может вызвать политика одного источника, например при использовании XMLHttpRequest для получения ресурсов из другого домена. Многие веб-браузеры предотвращают общий доступ к ресурсам независимо от источника (CORS), если сервер не настроен для задания соответствующих заголовков ответов. Вы можете настроить в CDN поддержку CORS, используя любой из следующих методов.

Резервная сеть CDN

Оцените, как приложение будет обрабатывать сбои в CDN и (или) временную недоступность. Клиентские приложения могут использовать копии ресурсов, которые были кэшированы локально (на клиенте) во время предыдущих запросов. Также вы можете включить код, который обнаруживает сбой и запрашивает ресурсы из источника (папки приложения или контейнера больших двоичных объектов Azure, в котором содержатся ресурсы), если сеть CDN недоступна.