CDN
| Полное название | Content Delivery Network |
|---|---|
| Появление | конец 1990-х (Akamai, 1998) |
| Основа | кеширующие обратные прокси в точках присутствия (PoP) |
| Маршрутизация | DNS (GeoDNS) или anycast |
| Управление кешем | заголовки Cache-Control, ETag, Age (RFC 9111) |
| Примеры провайдеров | Akamai, Cloudflare, Fastly, Amazon CloudFront, Google Cloud CDN |
CDN (англ. Content Delivery Network — сеть доставки контента) — распределённая сеть серверов, расставленных в дата-центрах по всему миру, которая хранит копии контента сайта и отдаёт их пользователю с ближайшего узла. Вместо того чтобы каждый запрос шёл через океан к исходному серверу (origin), браузер получает картинку, скрипт или видеофрагмент из точки присутствия в своём городе. Это сокращает задержку, разгружает origin и помогает переживать всплески трафика и DDoS-атаки.
История
Идея появилась в конце 1990-х, когда популярные сайты не выдерживали наплыва посетителей («эффект Slashdot»). В 1998 году исследователи MIT основали Akamai, построившую одну из первых коммерческих сетей доставки.[5] В 2000-х CDN стали стандартом для медиа и программных обновлений, а в 2010-х — и для обычных сайтов: Cloudflare, Fastly и облачные провайдеры (Amazon CloudFront, Google Cloud CDN) сделали подключение делом нескольких минут. Сегодня через CDN проходит большая часть веб-трафика, включая потоковое видео.
Как работает
CDN состоит из точек присутствия (PoP, Point of Presence) — площадок с кеширующими серверами. По сути каждый узел — это обратный прокси с большим кешем.
- Пользователь запрашивает
static.example.com. Домен указывает на CDN — обычно через запись CNAME (см. DNS-записи (A, AAAA, CNAME, MX, TXT)). - CDN направляет запрос в ближайший PoP одним из двух способов: - GeoDNS — DNS-сервер CDN возвращает разные IP в зависимости от расположения резолвера; - anycast — один и тот же IP-адрес анонсируется по BGP из всех точек, и маршрутизация интернета сама доставляет пакеты к ближайшей.[6]
- Узел проверяет кеш. Если объект есть и свежий — попадание (cache hit), ответ уходит сразу. Если нет — промах (miss): узел запрашивает объект у origin (часто через промежуточный уровень — origin shield), отдаёт пользователю и сохраняет.
- На узле же обычно завершается TLS: короткое рукопожатие с ближним сервером заметно ускоряет первую загрузку.
Ключевая метрика — cache hit ratio, доля запросов, обслуженных из кеша. Чем она выше, тем меньше нагрузка на origin и быстрее ответы.
Управление кешем
Что и как долго хранить, CDN решает по стандартным заголовкам кеширования HTTP.[1][2]
| Заголовок | Назначение |
|---|---|
Cache-Control: max-age=N |
сколько секунд ответ свежий для любого кеша |
Cache-Control: s-maxage=N |
то же, но только для общих кешей (CDN, прокси) |
Cache-Control: no-store / private |
не кешировать / кешировать только в браузере |
ETag, Last-Modified |
валидаторы для условных запросов (304 Not Modified) |
Vary |
от каких заголовков запроса зависит ответ (например, Accept-Encoding) |
stale-while-revalidate |
разрешает отдать устаревшую копию, пока в фоне идёт обновление[3] |
Ключ кеша по умолчанию — схема, хост, путь и строка запроса. Лишние параметры (utm_source и подобные) дробят кеш, поэтому их часто исключают из ключа в настройках CDN.
Есть два способа обновлять контент:
- версионирование имён — файлы собираются с хешем в имени (
app.3f9a1c.js) и кешируются «навсегда» (max-age=31536000, immutable), а новая версия получает новое имя. Это предпочтительный путь; - инвалидация (purge) — явная команда CDN удалить объект или группу объектов по пути или тегу. Она нужна для HTML и контента, у которого адрес постоянный.
# посмотреть, отдан ли ответ из кеша CDN
curl -sI https://example.com/logo.png | grep -iE 'cache-control|age|x-cache|cf-cache-status'
Заголовок Age показывает, сколько секунд объект лежит в кеше; провайдеры добавляют свои — X-Cache: HIT, CF-Cache-Status: HIT и т. п.
Что ещё делает CDN
- Защита от DDoS — распределённая сеть поглощает объёмные атаки, а веб-фильтр (WAF) отсекает вредоносные запросы.
- Сжатие и оптимизация — Brotli/gzip, преобразование изображений в WebP/AVIF, поддержка HTTP/2 и HTTP/3.
- Потоковое видео — HLS и DASH нарезают видео на короткие сегменты, которые прекрасно кешируются.
- Вычисления на краю (edge computing) — небольшие функции, исполняемые прямо в PoP (Cloudflare Workers, Fastly Compute, Lambda@Edge): редиректы, A/B-тесты, проверка токенов.
Ограничения
- Динамические персональные страницы кешировать нельзя или трудно — для них CDN даёт в основном выигрыш на TLS и маршруте.
- Неверные заголовки опасны: кеширование ответа с
Set-Cookieили персональными данными может показать чужую страницу другому пользователю. - CDN становится единой точкой отказа: сбой крупного провайдера выводит из строя тысячи сайтов одновременно.
- Провайдер видит расшифрованный трафик, поскольку TLS завершается на его узлах.
Для небольшого сайта, например статического, CDN часто достаточно даже без собственного сервера: многие хостинги сами раскладывают файлы по своей сети.