CDN

Материал из llmdocs — справочник разработчика
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) — площадок с кеширующими серверами. По сути каждый узел — это обратный прокси с большим кешем.

  1. Пользователь запрашивает static.example.com. Домен указывает на CDN — обычно через запись CNAME (см. DNS-записи (A, AAAA, CNAME, MX, TXT)).
  2. CDN направляет запрос в ближайший PoP одним из двух способов: - GeoDNS — DNS-сервер CDN возвращает разные IP в зависимости от расположения резолвера; - anycast — один и тот же IP-адрес анонсируется по BGP из всех точек, и маршрутизация интернета сама доставляет пакеты к ближайшей.[6]
  3. Узел проверяет кеш. Если объект есть и свежий — попадание (cache hit), ответ уходит сразу. Если нет — промах (miss): узел запрашивает объект у origin (часто через промежуточный уровень — origin shield), отдаёт пользователю и сохраняет.
  4. На узле же обычно завершается 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 часто достаточно даже без собственного сервера: многие хостинги сами раскладывают файлы по своей сети.

См. также

Источники

  1. RFC 9111 — HTTP Caching
  2. MDN — HTTP caching
  3. RFC 5861 — HTTP Cache-Control Extensions for Stale Content
  4. Cloudflare Learning — What is a CDN?
  5. Nygren, Sitaraman, Sun — The Akamai Network: A Platform for High-Performance Internet Applications (2010)
  6. RFC 4786 — Operation of Anycast Services