Networking

CDN

Content Delivery Network — сеть кеширующих серверов по всему миру, которая отдаёт контент пользователю с ближайшей к нему точки.

Что такое CDN

CDN (Content Delivery Network, сеть доставки контента) — географически распределённая сеть кеширующих серверов, которая отдаёт файлы сайта не с вашего сервера, а с ближайшей к пользователю точки присутствия (PoP, point of presence). Ваш собственный сервер в этой схеме называется origin.

Смысл — в физике. Пакет из Москвы во Франкфурт и обратно идёт около 40 мс, в Сингапур — около 150 мс, и это ещё до того, как сервер начал что-то считать. Загрузка страницы требует нескольких таких обменов. Если та же картинка лежит на edge-сервере в 15 мс от клиента, latency падает кратно, а нагрузка на origin — почти до нуля.

Как проходит запрос

Пользователь → DNS: cdn.example.com?
             ← адрес ближайшего PoP (anycast или geo-DNS)
Пользователь → edge PoP: GET /static/app.js
      HIT  → отдаёт из кеша, десятки миллисекунд
      MISS → идёт на origin, отдаёт клиенту и кладёт себе в кеш

Попал ли ответ в кеш, видно по заголовкам:

HTTP/2 200
cache-control: public, max-age=31536000, immutable
age: 84213
cf-cache-status: HIT

age — сколько секунд объект уже лежит в кеше, HIT — что origin не потревожили вовсе.

Управление кешем

Директива Cache-Control Что делает
max-age=31536000 хранить год (для файлов с хешем в имени)
immutable не перепроверять даже при обновлении страницы
s-maxage=600 TTL только для CDN, у браузера свой
stale-while-revalidate=60 отдавать протухшее, обновляя в фоне
private кеширует только браузер, CDN — нет
no-store не кешировать нигде

Надёжный способ инвалидации — не purge, а версионирование имени: app.a3f21b.js. Меняется содержимое — меняется имя, старый объект просто перестаёт запрашиваться. Purge оставьте для аварийных случаев: он раскатывается по сети не мгновенно.

Cloudflare

Cloudflare («клаудфлер») — самый известный CDN, но это давно не только кеш. Домен переводят на NS-серверы Cloudflare, после чего весь трафик идёт через их сеть как через обратный прокси:

  • Кеш статики — базовая функция, есть в бесплатном тарифе.
  • Защита от DDoS — атаку поглощает edge, до вашего сервера она не доходит.
  • WAF — фильтрация запросов по правилам.
  • TLS — сертификат терминируется на edge.
  • DNS-хостинг — Cloudflare становится авторитативным сервером зоны.

Побочный эффект: в A-записи домена виден адрес Cloudflare, а не ваш — реальный IP origin скрыт. Но и приходящий на сервер IP тоже становится адресом прокси. Настоящий адрес клиента передаётся заголовком, и его надо явно развернуть, иначе логи, лимиты и баны будут смотреть на один и тот же адрес:

# диапазоны берутся из официального списка Cloudflare, здесь один для примера
set_real_ip_from 173.245.48.0/20;
real_ip_header CF-Connecting-IP;

Что отдавать через CDN, а что нет

  • Статика — картинки, JS, CSS, шрифты, видео: кешируйте агрессивно, это основной выигрыш.
  • API и персонализированные ответыprivate или no-store. Закешированный чужой ответ с личными данными — классическая утечка.
  • Тяжёлые файлы — дистрибутивы, веса моделей, датасеты: CDN снимает исходящий трафик с object storage и заметно удешевляет раздачу.

CDN не заменяет балансировщик: он распределяет клиентов по точкам присутствия, но за origin по-прежнему отвечаете вы.

Связанные термины

  • DNS — через него клиент попадает на ближайший PoP
  • Домен — CDN подключают сменой его записей
  • latency — то, что CDN сокращает
  • DDoS-атаки — крупные CDN гасят их на edge
  • SSL-сертификат — обычно терминируется на стороне CDN
  • load balancer — распределяет нагрузку уже внутри origin

Готовы запустить GPU-задачу?

Запустить GPU-сервер