← Назад к списку
Системный дизайнАрхитектура и алгоритмыJunior

Зачем нужны балансировщик нагрузки и CDN? Какие алгоритмы балансировки бывают и какой контент имеет смысл раздавать через CDN?

Короткий ответ

  • Балансировщик распределяет запросы по инстансам и убирает единую точку отказа
  • Алгоритмы: round robin, least connections, взвешенные, по хэшу
  • L4 — по IP и портам, L7 — по путям, заголовкам, cookie
  • Health check выводит неживые инстансы из ротации
  • CDN кэширует контент на edge-серверах рядом с пользователем
  • Через CDN — статика, картинки, видео; API — реже, точечно
  • Инвалидация кэша CDN — версии файлов в URL

Балансировщик делит трафик между инстансами и следит за их здоровьем, а CDN приближает статический контент к пользователю, снимая нагрузку и уменьшая задержку.

Как сказать вслух

пример ответа

Балансировщик решает две задачи: масштабирование по горизонтали и отказоустойчивость — мёртвый инстанс выпадает из ротации по health check. Я назову пару алгоритмов и разницу L4 и L7. Про CDN скажу, что это кэш на границе сети: статику пользователь берёт с ближайшего edge-сервера, а не из нашего дата-центра.

Подробный ответ

Основной ответ

Балансировщик стоит перед группой одинаковых инстансов и распределяет запросы. Простейший round robin по кругу; least connections учитывает текущую загрузку; взвешенные варианты — разную мощность машин; hash по IP или cookie даёт привязку клиента к инстансу (sticky sessions, но лучше выносить состояние в Redis). L4-балансировка работает на уровне TCP — быстро и без разбора содержимого; L7 понимает HTTP и умеет маршрутизировать по пути (/api на один пул, /static на другой), терминировать TLS. Health check регулярно опрашивает инстансы и исключает упавшие. CDN — географически распределённые кэш-серверы: пользователь получает статику с ближайшего edge; промах уходит на origin. Инвалидация — через версионированные имена файлов (app.3f2a.js) с длинным TTL.

Ключевые моменты

  • L4 против L7. L4 быстрее и проще, L7 даёт маршрутизацию по содержимому запроса, TLS-терминацию и сжатие; часто используют оба уровня.
  • Sticky sessions. Привязка клиента к инстансу упрощает жизнь приложению с состоянием, но мешает масштабированию и деплою — состояние лучше выносить наружу.
  • Что отдавать в CDN. Статика, медиа, бандлы фронтенда — идеально; персонализированные API-ответы кэшируются плохо, но CDN всё равно полезен как точка входа и защита от DDoS.
  • Инвалидация CDN. Хэш содержимого в имени файла плюс длинный TTL избавляют от ручного сброса кэша: новая версия — это новый URL.

Практический контекст

На этом вопросе интервьюер проверяет базовую грамотность: отличает ли кандидат уровни балансировки, помнит ли про health check и понимает ли, что CDN — это про задержку и разгрузку origin, а не «магическое ускорение всего». Хороший джуниор-ответ упоминает, что сам балансировщик резервируют (пара active-standby или DNS на несколько), чтобы он не стал единой точкой отказа.

Частые ошибки

  • Забывают про health check — трафик продолжает идти на упавший инстанс
  • Полагаются на sticky sessions вместо выноса состояния, усложняя деплой и масштабирование
  • Думают, что CDN кэширует только по заголовкам сервера, и не знают про версионирование URL

ИП Кочкин Алексей Сергеевич · ИНН 390509026279 · ОГРНИП 325390000030973 · jiniys2005@yandex.ru