Зачем нужны балансировщик нагрузки и 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