CDN
Контент можно отдавать ближе к пользователю
Если все пользователи мира получают файлы из одного дата-центра, часть запросов проходит длинный сетевой путь, а центральная система вынуждена повторно отдавать одни и те же данные. 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 — это не основной сервер приложения
CDN хорошо снимает повторяющуюся доставку контента и может принять часть запросов на себя, но бизнес-операции всё равно обычно уходят дальше в origin-инфраструктуру. Поэтому CDN стоит воспринимать как внешний распределённый слой доставки, а не как замену всему приложению.