Пошук уроків, статей та іншого контенту
Як географічно розподілена мережа серверів скорочує затримку доставки статичного контенту.
Навіть найшвидший сервер не долає обмеження швидкості світла: запит від користувача в Києві до сервера в США фізично витрачає час на подорож туди й назад мережею, незалежно від того, наскільки швидко сервер обробляє сам запит. Для статичного контенту (зображення, відео, CSS, JavaScript-файли, що не залежать від конкретного користувача) цю затримку можна усунути, а не лише оптимізувати обробку на сервері.
Content Delivery Network — мережа серверів, розташованих у багатьох географічних точках по всьому світу, кожен з яких зберігає копію статичного контенту. Запит користувача автоматично спрямовується на географічно найближчий сервер CDN, а не на оригінальний («походження», origin) сервер — фізична відстань, а отже й затримка мережі, різко скорочується.
Без CDN: Користувач (Київ) ──────── (далеко) ──────── Origin-сервер (США)
З CDN: Користувач (Київ) ── (близько) ── CDN-вузол (Європа) ⇠ кешована копія з OriginКоли CDN-вузол ще не має копії конкретного файлу (перший запит із цього регіону), він звертається до origin-сервера, кешує отриманий результат локально, і віддає відповідь користувачу. Наступні запити з того самого регіону до того самого файлу обслуговуються вже безпосередньо з CDN-вузла, без звернення до origin — той самий принцип кешування (попередній урок цього модуля), застосований на рівні географічного розподілу, а не на рівні окремого сервера застосунку.
Зображення, відео, шрифти — великі, незмінні файли, ідеальні кандидати для тривалого кешування.
Скомпільовані CSS/JavaScript-бандли — версіоновані іменами файлів (з хешем вмісту), тому кешуються практично назавжди без ризику застарілості: зміна коду означає нове ім'я файлу, а не оновлення старого.
Статично згенеровані HTML-сторінки — Next.js статичний рендеринг (курс Next.js) природно узгоджується з CDN, оскільки результат однаковий для всіх користувачів і не залежить від конкретного запиту.
CDN добре підходить для контенту, однакового для всіх користувачів, — динамічний, персоналізований вміст (панель конкретного користувача, результати пошуку за його запитом) кешувати на CDN так само напряму не можна: він за визначенням різний для кожного запиту чи користувача.
Не використовувати CDN для великих статичних файлів (зображення, відео) — кожен запит їде повний географічний шлях до origin-сервера без потреби.
Кешувати на CDN персоналізований чи часто змінюваний вміст без ретельного продуманого TTL/інвалідації — ризик показати одному користувачу дані, призначені іншому, чи застарілу версію вмісту.
Забувати про версіонування іменами файлів для CSS/JS-бандлів — без цього оновлення коду застосунку може годинами не доходити до користувачів через агресивне CDN-кешування старої версії файлу з тим самим іменем.
CDN розподіляє копії статичного контенту географічно, скорочуючи затримку мережі за рахунок фізичної близькості до користувача — той самий принцип кешування, застосований на глобальному масштабі. Найкраще підходить для контенту, однакового для всіх користувачів (зображення, версіоновані CSS/JS-бандли, статично згенеровані сторінки); персоналізований чи часто змінюваний вміст вимагає обережнішого підходу до кешування чи взагалі не кешується на CDN напряму.