-

сайт небольшого сообщества специалистов в сфере IT;
здесь мы делимся экспертизой и наработками

Про CDN простыми словами

CDN (Сontent Delivery Network) - распределенная сетевая инфраструктура, часто еще добавляется слово "географически". Если попроще, то это когда файлы вашего сайта находятся на разных серверах в разных точках мира, копии файлов - то есть не так, что файл1 находится на сервере в Германии, а файл2 на сервере в Китае, а когда файл1 и файл2 копируется на каждый из серверов. Основная проблема, которую решает такой подход - это общая скорость загрузки сайта. Для лучшего понимания необходимо разобраться с несколькими аспектами загрузки сайта.

Расстояние до сервера

Когда вы заходите на какой-либо сайт, это означает, что ваш компьютер посылает пакет (небольшой набор данных аля "привет, че как?") по сети, сначала до вашего роутера по проводу или воздуху, потом от туда по проводу пакет идет до сервера, на котором находится сайт, по пути он преодолевает множество "препятствий" в виде других маршрутизаторов и, когда доходит до сервера, обрабывается там обратно отправляется ответный пакет по тому же пути. То есть у вашего обмена пакетами с сервером есть как физические ограничения (скорость по оптоволоконому кабелю может быть не больше 2/3 скорости света "по прямой"), так и "бюрократические"(например, проверка целостности пакета).

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

Статические и динамические данные

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

Статические данные

Под статическими имеются в виду те файлы, которые не меняются: картинки, видео, html-код, а также стили (css) и скрипты, написанные на javascript. Хоть javascript и язык программирования, но он обрабатывается браузеров, а сервер просто отдает один и тот же для всех код. Такие файлы можно смело раскопировать на разных серверах и быть уверенным, что, вне зависимости от того, на какой сервер вас перенаправили, все пользователи будут получать одно и то же.

Динамические данные

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

Разные вычислительные мощности под разные данные

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

Применение CDN

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

Всё в одном месте

Отделить статику от серверного кода является достаточно распространенной практикой даже в рамках одного сервера или одной локации. Например, поставить два сервера рядом: один заточен на исполнение кода, а на другом более объемный и быстрый жесткий и специальный веб-сервер, например, nginx с настроенными кэшированием в оперативной памяти.

Использование готовых хостингов

Обычно под ссылки для статических файлов создают отдельный поддомен, например если основной сайт доступен по домену kakvam.site, то для статики можно создать cdn.kakvam.site, который будет привязан к распределяющему серверу и тот уже будет искать географический ближайший сервер со статикой для клиента, в качестве сервера для статики можно использовать готовые заточенные под это хостинги, которые так и называются CDN Hosting или CDN Cloud, например, https://cloud.google.com/cdn

Итог

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

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