Gymterview
junior

Что такое CDN и зачем он нужен?

CDN (Content Delivery Network) — географически распределённая сеть серверов (edge servers), предназначенная для быстрой доставки контента пользователям путём размещения копий контента на серверах, расположенных максимально близко к конечным пользователям.

Аналогия из жизни: CDN — это сеть складов интернет-магазина по всей стране. Вместо того чтобы отправлять каждый заказ из центрального склада в Москве (origin-сервер), магазин хранит популярные товары на складах в каждом крупном городе (edge-серверы). Покупатель из Новосибирска получает товар с местного склада за 1 день, а не за 5.

Как работает CDN

Пример
Без CDN:
Пользователь (Москва) ──── 200 мс ────→ Origin-сервер (Нью-Йорк)

С CDN:
Пользователь (Москва) ── 20 мс ──→ CDN Edge (Москва)
                                    ├── cache hit  → ответ сразу (~20 мс)
                                    └── cache miss → Origin → кэширование → ответ
  1. Пользователь запрашивает https://cdn.example.com/image.jpg
  2. DNS направляет запрос на ближайший edge-сервер CDN (через anycast или geo-DNS)
  3. Если контент есть в кэше edge-сервера (cache hit) — возвращается сразу
  4. Если нет (cache miss) — edge-сервер запрашивает origin-сервер, кэширует ответ и возвращает пользователю
  5. При последующих запросах от других пользователей из того же региона — ответ из кэша

Зачем нужен CDN

Преимущество Описание
Снижение задержки Контент ближе к пользователю → быстрее загрузка
Снижение нагрузки на origin Большинство запросов обслуживается кэшем CDN
Высокая доступность Если один edge-сервер недоступен, запрос перенаправляется на другой
Защита от DDoS CDN поглощает трафик атаки на своих серверах, не пропуская его к origin
Пропускная способность CDN может обслуживать терабайты трафика (видео, обновления ПО)

Что обычно раздаётся через CDN

  • Статические файлы: изображения, CSS, JavaScript, шрифты, иконки
  • Видеостриминг: Netflix, YouTube, Twitch
  • Загрузка файлов: обновления ОС, дистрибутивы, патчи игр
  • API-ответы: read-heavy API с правильными заголовками кэширования

Популярные CDN-провайдеры

Провайдер Особенности
Cloudflare Бесплатный тариф, DDoS-защита, DNS, WAF
AWS CloudFront Интеграция с AWS (S3, EC2, Lambda@Edge)
Akamai Крупнейшая CDN, enterprise-уровень
Google Cloud CDN Интеграция с GCP
Fastly Instant purge, edge computing (VCL/Wasm)

Заголовки кэширования (ключевые для работы CDN)

Заголовок Значение Эффект
Cache-Control: public, max-age=31536000 Кэшировать публично, 1 год CDN и браузер кэшируют
Cache-Control: private, max-age=3600 Кэшировать только у клиента CDN НЕ кэширует
Cache-Control: no-cache Проверять у origin перед отдачей Условные запросы (ETag/304)
Cache-Control: no-store Не кэшировать вообще Конфиденциальные данные
ETag / Last-Modified Для условных запросов 304 Not Modified (экономия трафика)

Для Java-разработчика

Статические ресурсы приложения (JS, CSS) лучше отдавать через CDN. Правильная настройка Cache-Control в Spring Boot:

Конфигурация кэширования статики в Spring Boot
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS)
                        .cachePublic()
                        .immutable());
    }
}

Дополнительные аспекты:

  • API-ответы обычно не кэшируются на CDN, но для read-heavy API (каталоги, справочники) это может значительно снизить нагрузку
  • Для инвалидации кэша используйте versioned URLs (app.v2.js) или content hash (app.a1b2c3.js) вместо ручного purge
  • Spring Boot с spring.resources.chain.strategy.content.enabled=true автоматически добавляет content hash к именам файлов

Вывод

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

На собеседовании: объясните механизм работы (DNS → edge → cache hit/miss → origin), разницу между Cache-Control: public и private, и стратегию инвалидации кэша (versioned URLs vs manual purge). Часто спрашивают в связке с оптимизацией производительности веб-приложений.