Деплой и инфра
Уровни балансировки: тест с выбором
Шесть вопросов сквозь весь юнит. Каждый отражает решение, которое ты принимаешь, поднимая или эксплуатируя load balancer — не определение для зубрёжки, а выбор уровня или режим отказа, который надо верно прочитать под нагрузкой.
Убедись, что связываешь то, что каждый уровень видит, с тем, какую маршрутизацию он включает, и сводишь операционные ручки — алгоритм, health checks, affinity, draining — к отказам, которые они предотвращают.
Перед сервисом стоит NLB (L4). Продукт просит направить /api/v2/* в новый пул бэкендов, оставив /api/v1/* на старом. Какой честный ответ и почему?
Длительность запросов на бэкендах сильно разнится: большинство отвечают за 5 мс, некоторые — за 2 с. При round-robin p99 плохой и один бокс всегда горячий. Какая смена алгоритма помогает сильнее всего и почему?
Нужны одновременно end-to-end шифрование (посередине ничего не расшифровывается) И маршрутизация по пути на краю из одного балансировщика. Что верно?
Во время rolling deploy пользователи ловят сбросы соединений посреди запроса всякий раз, когда удаляют старый инстанс. Пул здоров и достаточен по размеру. Какой фикс?
Сервис использует cookie-based sticky sessions, чтобы держать in-memory состояние пользователя на одном бэкенде. Нагрузка неравномерна (один бокс горячий) и его нельзя чисто слить во время деплоя. Какой senior-фикс?
Команда использует DNS round-robin (две A-записи) как load balancer. Бэкенд умирает, и часть пользователей продолжают получать ошибки минутами. Почему, и что даёт настоящий балансировщик?
Сквозная линия юнита — одно правило: выбранный уровень решает, что балансировщик видит, а что он видит — решает, что он умеет. L4 форвардит байты по IP и порту — быстро, протокол-агностично, способен на TLS passthrough, но слеп к пути, заголовку и cookie; L7 терминирует соединение, читает HTTP и маршрутизирует по любому из них ценой CPU и крипто на запрос. Поверх уровня лежат операционные ручки, решающие надёжность: least-connections бьёт round-robin при неравномерной длительности запросов, health checks выкидывают мёртвые бэкенды, но не быстрее своего интервала, sticky sessions меняют равномерность и чистый draining на пиннинг состояния (так что сперва выноси состояние), а connection draining даёт текущим запросам завершиться перед выводом бэкенда. И DNS round-robin — не load balancer: ни health-aware, failover ограничен неконтролируемыми TTL и кешами.