Ускорение доставки статического контента с помощью CDN

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

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

Ниже вы найдете подробный обзор CDN: принципы работы, преимущества и т.д.

Что такое CDN?

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

CDN состоит из нескольких точек присутствия (point of presence, или PoP), которые находятся в разных местах и, в свою очередь, состоят из нескольких пограничных серверов, которые кэшируют активы из исходного сервера (хоста). Когда пользователь посещает ваш сайт и запрашивает статические активы, такие как изображения или файлы JavaScript, запросы направляются системой CDN на ближайший пограничный сервер, который обслуживает контент.

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

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

Провайдеры CDN часто предлагают полезные функции за дополнительную плату: обычно это смягчение DDoS-атак и ограничение скорости, пользовательская аналитика и оптимизация стримов или мобильного использования.

Как работает CDN?

Когда пользователи посещают ваш сайт, они сначала получают ответ от DNS-сервера, содержащего IP-адрес вашего веб-сервера хоста. Затем браузер запрашивает содержимое веб-страницы, которое часто состоит из множества статических файлов, таких как HTML-страницы, таблицы стилей CSS, код JavaScript и изображения.

После того, как вы развернете CDN и выгрузите эти статические активы (вручную или автоматически – оба механизма описаны в следующем разделе), веб-сервер должен будет переписать ссылки на статический контент, чтобы они указывали на файлы, размещенные в CDN. Если вы используете CMS, например WordPress, переписывание ссылок можно реализовать с помощью стороннего плагина, такого как CDN Enabler.

Многие CDN обеспечивают поддержку пользовательских доменов, позволяя создавать запись CNAME для конечной точки CDN. Как только CDN получает запрос пользователя в этой конечной точке (расположенной намного ближе к пользователю, чем ваши хосты), система направляет запрос в точку присутствия (PoP), расположенную ближе всего к пользователю. PoP обычно состоит из одного или нескольких пограничных серверов CDN, размещенных на точке обмена трафиком (Internet Exchange Point, IxP), то есть в центре обработки данных, который используют интернет-провайдеры (ISP) для подключения своих сетей. После этого внутренний балансировщик CDN направляет запрос на пограничный сервер, расположенный в этой PoP, который затем обслуживает контент.

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

  1. Когда CDN получает первый запрос на статический актив, такой как PNG-изображение, система не кэширует активы, а ищет копию на ближайшем пограничном сервере CDN, либо на самом исходном сервере. Последний случай называется «непопаданием» в кэш, обычно его можно узнать по заголовку ответа HTTP X-Cache: MISS. В таком случае запрос будет обрабатываться медленнее, чем будущие запросы, потому что после выполнения этого запроса актив будет кэширован на пограничный сервер.
  2. Дальнейшие запросы этого актива (так называемое попадание в кэш) с пограничного сервера теперь будут обслуживаться из кэша до истечения срока его действия (обычно он определяется через HTTP-заголовки). Эти ответы будут обслуживаться значительно быстрее, чем первый запрос, сокращая задержку и выгружая веб-трафик в сеть CDN. Определить, что ответ был обслужен из кэша CDN, можно с помощью заголовка ответа HTTP, который теперь будет содержать X-Cache: HIT.

Push-зоны и pull-зоны

Большинство провайдеров CDN предлагают два способа кэширования ваших данных: это push-зоны и pull-зоны.

Pull-зоны включают ввод адреса исходного сервера и возможность CDN автоматически извлекать и кэшировать все статические ресурсы, доступные на сайте. Pull-зоны обычно используются для доставки часто обновляемых веб-ресурсов маленьких и средних размеров, таких как HTML, CSS и JavaScript-файлы. Обычно после предоставления системе CDN адреса исходного сервера нужно переписать ссылки на статические активы, чтобы они указывали на этот URL-адрес. С этого момента CDN будет обрабатывать запросы ваших пользователей и обслуживать контент из своих географически распределенных кэшей (и с исходного сервера по мере необходимости).

В push-зонах данные загружаются в определенную корзину или хранилище. Затем CDN выгружает контент в кэш пограничных серверов. Push-зоны обычно используются для больших, редко изменяющихся файлов, таких как архивы, пакеты программного обеспечения, файлы PDF, видео и аудио.

Преимущества CDN

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

Ниже мы подробнее рассмотрим эти и некоторые другие важные преимущества CDN.

Разгрузка исходного сервера

Кэширование статических активов, таких как изображения, видео, CSS и файлы JavaScript, резко сократит использование полосы пропускания ваших исходных серверов. Сети доставки контента спроектированы и оптимизированы для обслуживания статического контента, а запросы клиентов будут обслуживаться пограничными серверами CDN. Это позволяет снизить нагрузку на исходные серверы, поскольку они будут обслуживать эти данные гораздо реже.

Сокращение задержки и улучшение пользовательского опыта

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

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

Управление трафиком и предотвращение простоев

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

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

Сокращение затрат

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

Повышение безопасности

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

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

Когда использовать CDN?

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

Перед развертыванием CDN нужно выполнить дополнительную оптимизацию (сжатие файлов JavaScript и CSS, а также включение сжатия HTTP-запросов) – это может существенно повлиять на время загрузки страницы и использование полосы пропускания.

Полезные инструменты для измерения скорости загрузки страницы и улучшения ее качества – это PageSpeed Insights от Google и Pingdom.

Заключение

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

Благодаря плагинам, поддержке основных платформ (таких как WordPress, Drupal, Django и Ruby on Rails) и дополнительным функциям (это смягчение DDoS-атак, поддержке SSL, пользовательская аналитике и сжатие активов) сети CDN могут быть эффективным инструментом для обеспечения безопасности и оптимизации веб-сайтов с высоким трафиком.

Tags: