CDN (Content Delivery Network или Сеть доставки контента) — распределенная по географическим точкам сетевая инфраструктура, которая обеспечивает быструю доставку контента пользователям веб-сервисов и сайтов. CDN-серверы стратегически размещаются по местоположениям, чтобы обеспечить минимальное время отклика.
Немного цифр и статистики
В 2018 году средний вес веб-страницы составлял 1513 килобайт. К 2023 году он уже увеличился до 2449 килобайт. За последние пять лет показатель вырос на 161%. Данные исследования подтверждают тенденцию к увеличению веса веб-страниц.
В настоящее время стриминговые аудио- и видеосервисы набирают популярность. К августу 2023 года количество подписчиков популярной платформы Spotify достигло отметки в 515 млн. В соответствии с опросами, 25% пользователей покидают веб-страницу, если она загружается более четырех секунд. 74% пользователей, заходящих на сайт с мобильных устройств, не желают ожидать загрузку дольше пяти секунд. 46% пользователей отказываются иметь дело с веб-сервисом, если он функционирует медленно.
Эти факты указывают на то, что объем «тяжелого» контента в интернете постепенно увеличивается с течением времени. Кроме того, они подчеркивают важность высокой производительности веб-сайтов и онлайн-сервисов в современном мире. Недостаточно высокая скорость загрузки может привести к утрате аудитории, а в некоторых случаях — к снижению прибыли. Для решения этой проблемы одним из эффективных подходов является внедрение Content Delivery Networks (CDN) — сетей доставки контента.
Основные термины
Перед тем как перейти к более подробному обсуждению особенностей CDN, определим основные понятия.
CDN (Сеть доставки контента) — географически распределенная сетевая структура, обеспечивающая быструю доставку контента пользователям веб-сервисов и сайтов. Компоненты сети, такие как серверы, расположены в разных географических точках, чтобы обеспечить минимальное время ответа для пользователей сайтов и сервисов.
Ориджин (исходный источник) — сервер, где хранятся первоначальные файлы или данные, которые распространяются через CDN.
PoP (точка присутствия) — кэширующий сервер, входящий в состав CDN и размещенный в конкретном местоположении. Для обозначения таких серверов также используется термин Edge (крайний узел).
Динамический контент — контент, который генерируется на сервере в момент получения запроса (может быть изменен пользователем или извлечен из базы данных).
Статический контент — контент, который хранится на сервере в неизменном виде (например, бинарные файлы, аудио- и видеофайлы, JS и CSS).
История CDN
Резкое развитие интернета в середине 1990-х привело к ситуации, когда серверам стало трудно справляться с нагрузкой. Для серверов того времени (которые иногда технически были менее мощными, чем современные ноутбуки) требовались разнообразные методы улучшения производительности.
Например, можно упомянуть иерархическое кэширование и термин information superhighway, которые в настоящее время используются в статьях по истории интернет-технологий.
Распределение статического и динамического контента обусловливает различные нагрузки на серверы. В случае с динамическим контентом, который требует генерации через обращения к базе данных, ключевую роль играют быстродействие процессора и объем оперативной памяти.
Для распределения статического контента, который часто оказывается тяжелым и требует быстрой загрузки, первостепенное значение имеет скорость сети. Смысл технических решений для улучшения процесса распределения статики заключается в следующем: достижение горизонтальной масштабируемости без сложной двусторонней синхронизации с основным сервером.
Аспект | Статический контент | Динамический контент |
---|---|---|
Генерация | Создается заранее и сохраняется на сервере | Генерируется при запросе клиента |
Обновление | Требует ручного изменения и обновления на сервере | Может автоматически обновляться без вмешательства |
Контент | Остается неизменным до изменения сервером | Может меняться на основе пользовательских действий или времени |
Загрузка страницы | Быстрее, так как контент уже предварительно создан | Может замедлить загрузку, так как требует дополнительного времени на генерацию |
Подходы к использованию | Подходит для статичных данных, которые редко меняются | Подходит для интерактивных и постоянно обновляемых данных |
Примеры | Статичные HTML-страницы, изображения | Социальные ленты, онлайн-игры, динамические формы |
Для снижения нагрузки владельцы веб-сервисов начали применять подход еще в конце 1990-х, когда стали распределять статический и динамический контент с различных серверов. Крупные интернет-проекты с огромной аудиторией, разбросанной по всему миру, стали располагать серверы для статики в различных географических точках.
В то же время, в конце 1990-х годов, появились компании, для которых организация распределения статического контента стала ключевой сферой деятельности. В 1998 году студент Массачусетского технологического института Дэниэл Левин и преподаватель математики Томсон Лейтон создали компанию под названием Akamai. В настоящее время она является одним из самых крупных (если не самым крупным) поставщиков CDN-услуг в мире.
![сайт Akamai, поставщика CDN](https://blog.skillfactory.ru/wp-content/uploads/2023/08/cdn-akamai-1024x340.jpg)
Число сетей доставки контента во всем мире постоянно увеличивается: соответствующие услуги предоставляют как крупные международные компании (например, Akamai, Amazon, Cloudflare), так и разнообразные региональные провайдеры.
Технология CDN применяется не только для распределения статического контента: дистрибуция контента через множество серверов в разных точках мира помогает обеспечивать доступность в периоды повышенной нагрузки.
За последние 10-12 лет еще один тип контента — стриминговый — стал широко распространен в интернете. Многочисленные сервисы потокового аудио и видео, на сегодняшний день пользующиеся огромной популярностью и многомиллионной, если не многомиллиардной аудиторией, заняли свою нишу. Распределение стало одним из распространенных сценариев использования CDN.
Как работает CDN
Представим себе веб-сервис, который активно используется людьми на всей территории России. Главные серверы этого сервиса размещены в Санкт-Петербурге, но пользователи находятся в различных местах — например, в Краснодаре (2 604,2 км от Петербурга), Новосибирске (3 826,1 км), Иркутске (5 661, 7 км) или Владивостоке (9 602, 4 км). Чем дальше пользователь находится от исходного сервера, тем больше времени требуется для получения ответа. В ранние дни Рунета, в начале 2000-х, жители Южно-Сахалинска или Петропавловска-Камчатского могли потратить до пяти или даже 10 минут на полную загрузку простой веб-страницы.
![принцип работы CDN](https://blog.skillfactory.ru/wp-content/uploads/2023/08/cdn-1024x413.png)
Однако при использовании CDN ситуация сильно отличается: пользователь из Владивостока автоматически переадресуется к ближайшему кэширующему серверу в составе сети доставки контента. Благодаря этому механизму доставка статического контента происходит значительно быстрее.
![Схема доставки контента для сайта через CDN и без него](https://blog.skillfactory.ru/wp-content/uploads/2023/08/cdn-2.png)
Для повышения скорости распределения динамического контента при использовании CDN-сервера используются альтернативные методы: провайдер сервиса сокращает сетевой маршрут через свою сеть.
Еще один захватывающий сценарий использования CDN — так называемое live-streaming или прямая трансляция: пользователи интернета по всему миру могут смотреть или слушать онлайн-трансляцию событий через веб-браузер или даже специальное приложение. Процесс организован следующим образом: один или несколько оригинальных серверов принимают потоковую передачу с видеокамеры, который немедленно ретранслируется на пункты присутствия. При этом оригинальные серверы не осуществляют непосредственную доставку контента пользователям. В арсенале стриминговых CDN также есть балансировщики нагрузки, которые направляют запросы к наименее нагруженным edge-серверам на текущий момент.
Как происходит распределение контента
Как правило, настройка распределения статического контента через CDN включает в себя следующие этапы.
Этап 1: Вынесение статики сайта на отдельный домен, например static.example.com. Домен будет выступать как источник контента (origin).
Этап 2: Создание дополнительного домена вида cdn.example.com для работы через CDN-сервер.
Этап 3: Подключение CDN у выбранного провайдера. Владельцу веб-сервиса необходимо предоставить провайдеру следующую информацию:
- домен, с которого будет осуществляться получение статики —static.example.com;
- домен, который будет использован для распределения контента — cdn.example.com.
Этап 4: Настройка CNAME записи у регистратора DNS, связывающей домен cdn.example.com с доменом CDN-провайдера, предоставленным при подключении. Например, у Selectel такой домен имеет вид 85e77c09-bc03-43bf-b8f3-9492ae33390f.selcdn.net, где уникальный идентификатор 85e77c09-bc03-43bf-b8f3-9492ae33390f генерируется автоматически.
Этап 5: Внесение изменений на веб-сайте: замена домена для статического контента, который планируется распределять через сервис доставки контента, на cdn.example.com.
Когда пользователь вводит адрес www.example.com в строке браузера, он получает HTML-страницу. В то же время весь статический контент, например изображения, загружается из CDN с адреса cdn.example.com.
Статический контент, предназначенный для распределения, часто размещается в облачных хранилищах. Для этой цели доступно множество плагинов и дополнений, специально разработанных для популярных систем управления контентом (CMS), таких как WordPress, Joomla, Drupal, 1C Битрикс и другие. С их помощью можно установить интеграцию с облачными сервисами хранения и осуществить передачу статического контента через CDN.
После подключения веб-сервис останется на оригинальном сервере. Кэшированные части сайта будут загружены на серверы CDN-сети. Автоматически определив ближайший сервер для пользователя, система обеспечит быструю загрузку статического контента с него.
Важно отметить одну ключевую деталь: серверы, входящие в состав CDN, не служат аналогом файловых серверов, где контент размещается для последующей загрузки. Сеть не используются для хранения контента, а выполняют кэширование согласно определенным алгоритмам.
Как CDN определяет местоположение ближайшего кэширующего сервера
Обычно для загрузки контента из серверов используются два распространенных метода: GeoDNS и AnyCast.
С помощью технологии GeoDNS можно связать несколько IP-адресов с одним доменным именем. В зависимости от географического положения (определяется по IP-адресу, с которого был отправлен запрос), пользователь перенаправляется на ближайший сервер.
При применении технологии AnyCast общий адрес используется, но маршрутизация направляется к серверам внутри определенного региона. Когда пользователь обращается к адресу www.example.com, его запрос переадресуется к ближайшей точке присутствия. Провайдер пользователя получает несколько объявлений от разных сетей, содержащих точки присутствия, и маршрутизатор провайдера выбирает наиболее близкий. Ответ также возвращается по наименьшему маршруту.
Как происходит кэширование контента
Наиболее распространенной схемой является сценарий первичного запроса: максимальное время для загрузки требуется для первого пользователя, который обратился к оригинальному серверу. В дальнейшем все остальные пользователи получат закэшированные данные с ближайшей к ним точки присутствия.
Здесь важно учитывать географию: к примеру, после запроса от пользователя из Рио-де-Жанейро данные будут закэшированы на сервере внутри территории Бразилии. Однако это не решит задачу ускорения доступа для пользователей из Парижа или Лондона.
Чтобы преодолеть ограничения схемы, используются технологии регионального кэширования: соседние серверы в сети CDN обмениваются контентом между собой, минуя оригинальный сервер.
В большинстве случаев пользователь, отправивший запрос на получение статического контента, автоматически перенаправляется к ближайшей точке присутствия, где он получает кэшированную версию контента. Если ближайшая точка не содержит запрашиваемые файлы, поиск будет распространяться на соседние точки, откуда будет получен ответ для пользователя. В CDN Akamai этот процесс известен как tiered distribution (многоуровневая раздача).
![Yandex Cloud CDN](https://blog.skillfactory.ru/wp-content/uploads/2023/08/cdn-yandex-1024x455.png)
Для чего используется CDN
Чаще всего CDN применяется для сокращения времени ответа для кэшированного контента, что, как уже было упомянуто, помогает уменьшить отток посетителей из-за медленной загрузки ресурса и таким образом снизить потенциальные финансовые потери. Кроме того, технология CDN помогает уменьшить вероятность потери доступа к контенту из-за сбоя основного сервера, так как контент будет доступен во время восстановления работы основного сервера.
Применение CDN значительно разгружает основной сервер, что позволяет справиться с пиковыми нагрузками. Современные сети доставки контента способны обрабатывать даже огромные объемы трафика. В конце 2018 года компания Akamai объявила о достижении рекордного объема переданного через сервис доставки трафика — 72 Тб/с.
В современных условиях CDN также активно используются для распределения стримингового контента.
![CDN Azure](https://blog.skillfactory.ru/wp-content/uploads/2023/08/cdn-azure-1024x476.jpg)
Особенности работы с CDN
Первая существенная проблема, с которой могут столкнуться владельцы веб-сервисов, использующих CDN, связана с задержками в кэшировании. Возможен следующий сценарий: файл на основном сервере был изменен, но на кэширующих серверах он остается в неизменном состоянии. Это особенно заметно, когда распространяется часто обновляемый контент, такой как фотографии с событий или новые версии программного обеспечения.
Для обеспечения доставки актуального контента в современных CDN предусмотрена функция очистки кэша, что позволяет удалить контент из пула кэширования. Кроме того, владельцы веб-сайтов и сервисов могут контролировать настройки с помощью заголовков-валидаторов.
Также следует учесть возможные блокировки: если по какой-либо причине будут заблокированы сервисы, которые являются вашими соседями по IP адресу, ваш сайт также может быть заблокирован. Но эту проблему также можно решить: по запросу CDN-провайдеры могут изменить ваш IP-адрес.
Кому нужна CDN
CDN особенно полезна для веб-проектов, имеющих широкую аудиторию в разных регионах или странах. Этот аспект понятен: уменьшение задержек, быстрая доставка контента и повышение уровня удобства, что в результате приводит к увеличению числа удовлетворенных пользователей.
Также CDN может быть полезным инструментом для разработчиков мобильных приложений. Согласно статистике, пользователи часто прекращают использование приложения из-за проблем с его скоростью. Недавно на рынке появились специализированные технические решения, целенаправленно разработанные для распределения контента на мобильных устройствах. Они называются Mobile CDNs. Этот тип услуг предоставляется многими известными CDN-провайдерами, включая Akamai и Amazon.
Наконец, она подходит также для проектов, фокусирующихся на распространении игрового, мультимедийного контента и стриминговых услуг.
На что обратить внимание при выборе CDN-провайдера
Количество точек присутствия. Это особенно важно для проектов с международной аудиторией. Целесообразно ознакомиться с информацией о наличии точек присутствия в регионах, интересных именно для вашей аудитории, и сопоставить эту информацию с местоположением потенциальных пользователей.
Наличие соединений с операторами связи. Это важный фактор, который влияет на эффективность и скорость работы CDN. Например, у провайдера с многочисленными точками присутствия, но ограниченным количеством связей, задержка может быть выше, чем у провайдера с меньшим числом точек, но более качественными связями.
К сожалению, многие CDN-провайдеры не раскрывают эту информацию публично, поэтому проверить можно только через тестирование.
Наличие дополнительных услуг и функций. Многие провайдеры CDN предоставляют дополнительные сервисы, включая анализ статистики, управление политиками кэширования, настройку HTTP-заголовков, предварительную загрузку тяжелых контентов (более 200 МБ), полную и частичную очистку кэша.
Помимо этого, при выборе CDN-провайдера важно убедиться, что он поддерживает необходимые технологии и протоколы, такие как HTTP/2, IPv6, SSL-сертификаты и другие.
0 комментариев