CDN

Базовый System Design
≈ 2 мин чтения

Контент можно отдавать ближе к пользователю

Если все пользователи мира получают файлы из одного дата-центра, часть запросов проходит длинный сетевой путь, а центральная система вынуждена повторно отдавать одни и те же данные. CDN — Content Delivery Network — размещает распределённые точки присутствия ближе к пользователям и позволяет обслуживать подходящие запросы с этих узлов.

client -> edge node -> origin
            |            ^
            +-- cache ---+

Клиент обращается к edge-узлу CDN. Если нужный объект уже находится там, он возвращается сразу. Если объекта нет, CDN получает его из исходной системы — origin — и при подходящей политике сохраняет для следующих запросов.

Cache hit и cache miss

Когда CDN отдаёт объект из локального кэша, это cache hit. Когда приходится идти к origin, это cache miss. Чем выше доля полезных попаданий, тем меньше запросов и исходящего трафика остаётся на центральной инфраструктуре.

Лучше всего кэшируются данные, которые часто читаются и меняются сравнительно редко: изображения, видеофрагменты, стили, JavaScript-файлы и другие публичные объекты. Некоторые CDN умеют работать и с более динамическими ответами, но политика кэширования тогда требует большей осторожности.

Свежесть данных — часть решения

Кэш создаёт копию данных, а значит появляется вопрос: когда эта копия должна перестать считаться актуальной? Для этого используют сроки жизни, версии URL и явную инвалидацию.

Например, статический файл можно публиковать под новым версионированным именем. Тогда старая копия спокойно живёт до окончания своего срока, а клиенты сразу начинают запрашивать новый объект.

/assets/app.v41.js
/assets/app.v42.js
CDN уменьшает расстояние и нагрузку, но не делает данные автоматически кэшируемыми. Для персонального, быстро меняющегося или чувствительного ответа нужно отдельно решить, допустимо ли хранить его на edge-узле.

CDN — это не основной сервер приложения

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