Реализацией какого архитектурного паттерна является Netflix Eureka?

«Реализацией какого архитектурного паттерна является Netflix Eureka?» — вопрос из категории Паттерны, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Netflix Eureka — это реализация паттерна Service Discovery (Обнаружение сервисов) для микросервисной архитектуры.

Проблема, которую решает паттерн: В динамической среде микросервисов инстансы могут запускаться, останавливаться или менять адреса. Жесткая привязка клиентов к конкретным хостам (через конфигурационные файлы) становится неэффективной и ненадежной.

Как работает Eureka:

  1. Регистрация (Eureka Client): При запуске каждый микросервис (клиент) регистрирует себя в Eureka Server, отправляя свой сетевой адрес и метаданные.
  2. Обновление состояния (Heartbeat): Клиент периодически отправляет сигналы "сердцебиения", чтобы подтвердить свою доступность. Если сигналы прекращаются, сервер исключает инстанс из реестра.
  3. Запрос (Eureka Client): Когда сервису-потребителю (например, API Gateway) нужно вызвать другой сервис, он запрашивает у Eureka Server список доступных инстансов.
  4. Балансировка нагрузки: Клиентская библиотека (например, Spring Cloud LoadBalancer) может выбрать один инстанс из списка, реализуя клиентскую балансировку нагрузки (часто round-robin).

Пример конфигурации клиента в Spring Boot:

// application.yml
spring:
  application:
    name: order-service

eureka:
  client:
    service-url:
      defaultZone: http://eureka-server:8761/eureka/

Ключевые преимущества:

  • Отказоустойчивость: Автоматическое удаление нерабочих инстансов.
  • Гибкость: Легкое добавление или масштабирование сервисов без изменения конфигурации потребителей.
  • Децентрализованная балансировка: Нагрузка распределяется на стороне клиента.

Альтернативы: HashiCorp Consul, Apache ZooKeeper, встроенный механизм Kubernetes Services.