Что такое Ribbon и для чего он используется
Что проверяют
Понимаете ли вы, что такое клиентская балансировка нагрузки и чем она отличается от балансировки на стороне сервера. Заодно проверяют свежесть опыта: ответ в духе беру Ribbon, без оговорок, датирует знания.
Как отвечать
Ribbon это библиотека клиентской балансировки для сервисов на Spring Cloud. Идея в том, что список адресов экземпляров нужного сервиса лежит у вызывающей стороны, и она сама решает, к какому экземпляру уйдёт конкретный запрос. Список приезжает из реестра сервисов, чаще всего Eureka, и обновляется по мере появления и исчезновения экземпляров.
Из чего состоит: правило выбора экземпляра (по кругу, с учётом доступности, с предпочтением своей зоны), проверка живости и поставщик списка серверов. В коде это выглядело как RestTemplate с аннотацией @LoadBalanced или клиент Feign, где вместо хоста подставляется имя сервиса.
Обязательно скажите про текущее положение дел: Ribbon переведён в режим поддержки вместе с остальными библиотеками того поколения и из свежих версий Spring Cloud убран. Замена внутри фреймворка это Spring Cloud LoadBalancer с той же аннотацией и своим набором правил, а за его пределами ту же задачу закрывает платформа: сервис в Kubernetes или прокси рядом с приложением.
Где спотыкаются
Называют библиотеку действующим стандартом. Она не развивается, в новых версиях фреймворка её просто нет, и сильный ответ показывает и знание наследия, и то, чем оно заменено.
Не могут объяснить, зачем балансировать на клиенте. Смысл в отсутствии лишнего сетевого звена и в знании топологии: клиент видит зоны и состояние экземпляров, поэтому умеет не ходить в соседний дата-центр. Цена в том, что логика размазана по всем клиентам и обновляется вместе с ними.
Путают балансировку с устойчивостью. Переключение на живой экземпляр не отменяет таймаутов, ограничителей и предохранителя: без них медленный экземпляр соберёт на себя очередь запросов и утянет за собой вызывающий сервис.