Современные веб-сайты и приложения часто должны предоставлять большое количество статичного контента конечным пользователям. Это могут быть изображения, таблицы стилей, файлы JavaScript и видео. По мере роста количества и размера таких статичных активов, значительно увеличивается объем трафика, а также время загрузки страницы, что ухудшает опыт просмотра сайта или приложения для ваших пользователей и снижает количество свободных ресурсов сервера.
Чтобы заметно сократить время загрузки страницы, улучшить производительность и снизить объем трафика и расходы на инфраструктуру, вы можете реализовать CDN, или сеть доставки контента (content delivery network), чтобы кешировать подобные активы на распределенных в разных географических точках серверах.
В этом руководстве вы найдете достаточно общее описание сетей доставки контента и принципов их работы, а также преимущества, которые они могут предоставить вашим веб-приложениям.
Сеть доставки контента — это географически распределенная группа серверов, оптимизированная для доставки статичного контента конечным пользователям. Подобный статичный контент может представлять собой практически любой тип данных, но, как правило, CDN используются для предоставления веб-страниц и связанных с ними файлов, трансляции видео и аудио и больших пакетов программного обеспечения.
CDN включает несколько точек входа в сеть (PoP) в различных местах, каждая из которых включает несколько пограничных серверов, которые кешируют активы из вашего источника или хост-сервера. При посещении пользователем веб-сайта и запросе статичных активов, таких как изображения или файлы JavaScript, эти запросы перенаправляются CDN на ближайший пограничный сервер, откуда и предоставляется контент. Если у данного пограничного сервера нет кешированных активов или срок действия подобных активов истек, CDN будет выполнять выборку и кешировать последнюю версию из любого другого ближайшего пограничного сервера CDN или ваших серверов источника. Если у пограничного сервера CDN есть запись в кеше для ваших активов (что происходит в большинстве случаев, если ваш веб-сайт принимает среднее количество трафика), он будет возвращать конечному пользователю копию из кеша.
Это позволяет географически разрозненным пользователям минимизировать количество действий, необходимых для получения статичного контента, получая этот контент напрямую из кеша ближайшего пограничного сервера. В результате значительно сокращается количество задержек в доступе и утерянных пакетов, достигается увеличение скорости загрузки страницы и резко уменьшается нагрузка на вашу инфраструктуру источника.
Поставщики CDN часто предлагают дополнительные функции, например, смягчение последствий DDoS-атак и ограничение скорости, инструменты аналитики пользователей, а также инструменты оптимизации для трансляций или мобильного трафика за дополнительную плату.
Когда пользователь посещает ваш веб-сайт, сначала он получает ответ от сервера DNS, который содержит IP-адрес вашего веб-сервера хоста. Затем браузер пользователя запрашивает контент веб-страницы, который часто включает целый ряд статичных файлов, таких как страницы HTML, таблицы стилей CSS, код JavaScript и изображения.
После развертывания CDN и переноса этих статичных активов на сервера CDN либо путем ручной их выгрузки, либо путем автоматической выгрузки (оба механизма описываются в следующем разделе), вы должны будете указывать вашему веб-серверу на необходимость перезаписи ссылок на статичный контент, чтобы эти ссылки указывали на файлы, которые содержатся в CDN. Если вы используете CMS, например WordPress, подобная перезапись ссылки может быть выполнена с помощью стороннего плагина, например CDN Enabler.
Многие CDN обеспечивают поддержку для настраиваемых доменов, позволяя вам создавать запись CNAME в вашем домене, указывающую на конечную точку CDN. Когда CDN получает запрос пользователя в этой конечной точке (которая расположена на пограничном сервере, находящемся гораздо ближе к пользователю, чем ваши серверы бекэнда), он перенаправляет запросы на ближайшую к пользователю точку входа (PoP). Эта точка входа часто включает один или несколько пограничных серверов CDN, которые расположены в точке обмена интернет-трафиком (IxP), то есть, по сути, в центре обработки данных, используемом интернет-провайдерами для соединения своих сетей. Внутренний распределитель нагрузки CDN перенаправляет запрос на пограничный сервер, находящийся в этой точке входа, который затем предоставляет контент пользователю.
Механизмы кеширования, применяемые разными поставщиками CDN, различаются, но обычно они работают следующим образом:
X-Cache: MISS
. Этот первоначальный запрос может быть медленнее, чем будущие запросы, поскольку после выполнения этого запроса данный актив будет храниться на пограничном сервере.X-Cache: HIT
.Дополнительные данные о том, как работает и реализуется конкретная CDN, приведены в документации поставщика CDN.
В следующем разделе мы добавим два популярных типа CDN: push и pull CDN.
Большинство поставщиков CDN предоставляет два способа кэширования ваших данных: pull-зоны и push-зоны.
Pull-зоны подразумевают ввод адреса сервера источника, после чего CDN автоматически получает и кеширует все статичные ресурсы на вашем сайте. Pull-зоны, как правило, используются для предоставления часто обновляемых веб-активов небольшого и среднего размера, таких как файлы HTML, CSS и JavaScript. После предоставления CDN адреса сервера источника следующим шагом обычно является переписка ссылок на статичные активы, чтобы они указывали на URL-адрес, предоставляемый CDN. С этого момента и далее CDN будет обрабатывать входящие запросы активов от ваших пользователей и обслуживать контент из распределенных по географическому принципу кешей и вашего источника, если это уместно.
Чтобы использовать Push-зону, вы должны загрузить ваши данные в указанный блок или место хранения, которое после этого CDN отправляет в кеш на распределенный парк пограничных серверов. Push-зоны, как правило, используются для крупных и редко изменяемых файлов, например архивов, пакетов программного обеспечения, PDF-файлов, видео и аудио.
Почти любой сайт может воспользоваться преимуществами, предоставляемыми CDN, но обычно основными причинами внедрения такой сети являются возможность снижения объема трафика из серверов источника на серверы CDN, а также сокращение времени задержки для географически распределенных пользователей.
Мы обсудим эти преимущества, а также некоторые другие основные выгоды от использования CDN ниже.
Если вы практически достигли пиковой пропускной способности на ваших серверах, разгрузка статичных активов, таких как изображения, видео, файлы CSS и JavaScript, позволит значительно снизить нагрузку на ваши серверы. Сети доставки контента предназначены и оптимизированы для обслуживания статичного контента, а запросы клиента для этого контента будут перенаправляться на пограничные серверы CDN и обслуживаться ими. Это дает дополнительное преимущество при сокращении нагрузки на серверы источника, поскольку они будут гораздо реже обслуживать эти данные.
Если ваши пользователи географически распределены, а необычно большая часть трафика приходит из удаленного географического района, система CDN может уменьшать время задержки, выполняя кеширование статичных активов на пограничных серверах, расположенных ближе к вашим пользователям. Уменьшая расстояние между пользователями и статическим контентом, вы можете быстрее предоставлять контент пользователям и улучшать опыт взаимодействия, повышая скорость загрузки страницы.
Эти преимущества особенно важны для веб-сайтов, обслуживающих главным образом потребляющий множество трафика видеоконтент, где большое время задержки и низкая скорость загрузки оказывают прямое влияние на пользовательский опыт и уровень вовлечения при работе с контентом.
CDN позволяет обрабатывать пиковые нагрузки для трафика и справляться с резким ростом трафика, отправляя распределяющие нагрузку запросы в распределенную сеть пограничных серверов. Загружая и кешируя статичный контент в сети доставки, вы можете обслуживать большее количество пользователей одновременно, используя текущую инфраструктуру.
Для веб-сайтов, использующих один сервер источника, такие пики трафика часто могут перегружать систему, что может становиться причиной незапланированных отключений и перерывов в работе сайта. Перенос трафика на доступную сеть с избыточными ресурсами, предназначенную для обработки различных уровней веб-трафика, может увеличить доступность ваших активов и контента.
Предоставление статичного контента, как правило, составляет большую часть вашего трафика, перенос этих активов в сеть доставки контента может значительно сократить месячные расходы на инфраструктуру. Помимо сокращения затрат на обслуживание трафика, CDN может снижать расходы на организацию работы сервера с помощью снижения нагрузки на серверы источника, что позволит увеличить масштаб вашей существующей инфраструктуры. Наконец, некоторые поставщики CDN предлагают месячные тарифы с фиксированной ценой, что позволяет перейти от непрогнозируемых затрат на трафик к стабильной и предсказуемой регулярной сумме.
Еще одним распространенным вариантом использования CDN является смягчение последствий DDoS-атак. Многие поставщики CDN предоставляют возможность мониторинга и фильтрации запросов для пограничных серверов. Подобные службы проводят анализ веб-трафика на подозрительные элементы, блокируя трафик злоумышленников, одновременно позволяя добросовестным пользователям использовать сайт. Поставщики CDN, как правило, предоставляют различные службы для смягчения последствий DDoS-атак, от общей защиты на уровне инфраструктуры (слои 3 и 4 OSI) до более продвинутых служб и ограничения скорости.
Кроме того, большинство CDN позволяют в полной мере настроить SSL, чтобы вы могли шифровать трафик между CDN и конечным пользователем, а также трафик между CDN и серверами источника, используя предоставляемые CDN или пользовательские SSL-сертификаты.
Если ограничением вашей системы является нагрузка на ЦП на сервере источника, а не трафик, CDN может оказаться не самым подходящим решением. В данном случае локальное кеширование с помощью таких популярных средств кеширования, как NGINX или Varnish, может значительно снизить нагрузку с помощью предоставления активов из системной памяти.
Помимо развертывания CDN, такие дополнительные меры оптимизации, как, например, уменьшение размера и сжатие файлов JavaScript и CSS или активация сжатия HTTP-запросов, могут также оказывать значительное влияние на время загрузки страницы и объем трафика.
PageSpeed Insights от Google — это отличный инструмент для оценки скорости загрузки страницы и ее оптимизации. Еще одним полезным инструментом, который предоставляет каскадную разбивку скорости запросов и ответов, а также меры оптимизации, является Pingdom.
Сеть доставки контента может служить быстрым и эффективным решением для масштабирования и повышения доступности веб-сайтов. Кешируя статичные активы в географически распределенной сети оптимизированных серверов, вы можете значительно сократить время, затрачиваемое на загрузку страницы, а также продолжительность задержек для конечных пользователей. Также CDN позволяет значительно сократить количество трафика, получая запросы пользователей и отправляя необходимые данные из кеша на пограничном сервере, сокращая объем передаваемых данных и затраты на инфраструктуру.
Наличие плагинов и поддержки большинства фреймворков, например, WordPress, Drupal, Django и Ruby on Rails, а также таких дополнительных функций, как смягчение последствий DDoS-атак, полноценные SSL-сертификаты, мониторинг пользователей и сжатие активов, делает CDN полезным инструментом для обеспечения безопасности и оптимизации веб-сайтов с высоким трафиком.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!