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-сервер