CDN (Content Delivery Network) — это сеть серверов, распределённых по всему миру. Их цель — быстро доставлять статический контент (HTML, CSS, JS, картинки, видео) пользователям из ближайших к ним дата-центров.
- Ускорение: Если твой сервер в Москве, а клиент в Австралии, физику не обманешь — пинг будет высоким. CDN отдаст картинку с сервера в Сиднее за миллисекунды.
- Снятие нагрузки: Твои серверы (Origin) обслуживают в разы меньше запросов, так как CDN принимает удар статики на себя.
- Доступность и защита: При DDoS-атаке злоумышленники бьют в CDN (у которого огромная пропускная способность), а не в твой хрупкий бэкенд.
Типы CDN: Push vs Pull
| Характеристика | Push CDN | Pull CDN (Самый частый) |
|---|---|---|
| Как работает | Ты сам принудительно загружаешь файлы на CDN при каждом релизе. | CDN сам тянет файл с твоего сервера при первом запросе от пользователя. |
| Когда использовать | Мало трафика, контент весит много и обновляется редко. | Много трафика, контент генерируется или меняется часто. |
| Плюсы | Файлы гарантированно лежат на Edge-серверах и отдаются моментально. | Минимум возни: настроил один раз, и CDN сам кеширует то, что реально запрашивают. |
| Минусы | Высокие расходы на хранение даже тех файлов, которые никто не скачивает. | Первому пользователю не повезет — он будет ждать скачивания с Origin (Cache Miss). |
Темная сторона CDN: Инвалидация кэша
Фил Карлтон говорил: «В Computer Science есть только две сложные проблемы: инвалидация кэша и придумывание имен».
Если ты выкатил новый дизайн (новый CSS-файл), а у старого файла на серверах CDN стоит TTL (Time To Live) 24 часа — твои пользователи еще сутки будут видеть сломанный старый дизайн. Как это решать?
- Версионирование файлов: Это индустриальный стандарт. Вместо файла
сборщик (Webpack/Vite) генерирует файл с хэшом:styles.css. При релизе меняется имя файла, и CDN вынужден скачать новый файл как совершенно другой ресурс. Старый кэш никого не волнует.styles.a4b8c9.css - Принудительная очистка: Можно отправить команду в Cloudflare или AWS CloudFront немедленно удалить конкретный файл из кэша всех Edge-серверов. Это дорогая (по ресурсам CDN) и иногда долгая операция.