Знакомы ли вы со Spring Cloud, Eureka, Ribbon, Hystrix и Feign Client
Что проверяют
Работали ли вы с микросервисами на Spring и следите ли за тем, как менялся стек: половина перечисленного устарела, и интервьюер часто проверяет именно это. Следом спрашивают, чем вы замените Ribbon и Hystrix сегодня и нужен ли Eureka, если сервисы живут в Kubernetes.
Как отвечать
Разложите по задачам и сразу скажите, что актуально:
- Eureka: реестр сервисов. Экземпляры регистрируются при старте и шлют heartbeat, клиенты получают адреса по имени сервиса. Поддерживается и сейчас, альтернативы: Consul или встроенное обнаружение Kubernetes через Service и DNS;
- Ribbon: клиентская балансировка. Проект Netflix в режиме поддержки, из Spring Cloud удалён в релиз-трейне 2020.0. Замена: Spring Cloud LoadBalancer, по умолчанию round robin, подключается через
@LoadBalancedнаRestTemplateилиWebClient.Builder; - Hystrix: circuit breaker, тоже заморожен и тоже удалён. Сейчас берут Resilience4j напрямую или через Spring Cloud CircuitBreaker: circuit breaker, retry, rate limiter, bulkhead, time limiter. Объясните состояния closed, open, half-open и роль fallback;
- Feign: декларативный HTTP-клиент, интерфейс с
@FeignClient(name = "orders")и аннотациями Spring MVC. Spring Cloud OpenFeign объявлен feature complete, и для нового кода Spring предлагает HTTP interface clients с@HttpExchangeповерхRestClientилиWebClient.
Опыт подавайте конкретно: сколько сервисов, какие таймауты и пороги circuit breaker ставили, что происходило при падении зависимости. Если работали только со старым стеком, так и скажите и покажите, что знаете путь миграции.
Где спотыкаются
Рассказывают про Ribbon и Hystrix как про текущий выбор. Для интервьюера это знак, что опыт остался в проектах до 2020 года и не обновлялся.
Ставят circuit breaker без таймаутов. Если зависимость не падает, а висит, пул потоков заканчивается раньше, чем размыкается цепь.
Не понимают, зачем Eureka в Kubernetes. Там обнаружение и балансировка уже есть на уровне платформы, и второй реестр часто только добавляет точку отказа.