Что такое service discovery и где здесь Eureka?
- Как сервисы находят друг друга в микросервисах?
Service discovery — реестр живых экземпляров сервисов: сервис регистрируется при старте, клиенты находят адреса по имени. Eureka — реестр Netflix в Spring Cloud; в Kubernetes discovery встроен через Service и DNS.
- Клиентский поиск: клиент получает список и сам балансирует (Spring Cloud LoadBalancer)
- Серверный: запрос идёт на стабильное имя, балансирует инфраструктура (Kubernetes Service)
- Регистрация с heartbeat — мёртвые экземпляры выпадают
А ещё В Kubernetes Eureka обычно не нужна
Подробно
Проблема: экземпляры сервисов появляются и исчезают (автомасштабирование, выкатки, падения), адреса меняются. Захардкоженные адреса не работают.
Реестр:
- сервис при старте регистрируется (имя, адрес, порт, метаданные) и периодически шлёт heartbeat;
- пропал heartbeat — запись удаляется;
- клиенты запрашивают список экземпляров по имени.
Два подхода:
- клиентский (Eureka + Spring Cloud LoadBalancer): клиент получает список экземпляров и сам выбирает, куда слать (
lb://ordersв WebClient/RestClient с@LoadBalanced). Гибко, но логика в каждом клиенте; - серверный (Kubernetes Service, Consul + прокси, облачные балансировщики): клиент обращается к стабильному имени
orders, DNS и kube-proxy или service mesh распределяют запросы. Клиент проще.
Eureka — AP-реестр: при сетевых проблемах предпочитает отдавать возможно устаревший список, чем ничего (self-preservation mode). Альтернативы — Consul, ZooKeeper, etcd.
Kubernetes: Service с селектором подов, Endpoints обновляются по readiness-пробам, имя резолвится через DNS. Отдельный реестр не нужен; Spring Cloud Kubernetes умеет читать сервисы из API при необходимости.
Что хотят услышать
- Зачем нужен discovery.
- Регистрация, heartbeat, поиск по имени.
- Клиентский и серверный подходы.
- Eureka и Kubernetes.
Частые ошибки
- Ставить Eureka в Kubernetes «по привычке».
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Шифрование трафика между сервисами по взаимному TLS
- ✓Поиск сервисов по имени, а не host:port; Eureka — реестр
- ✗Централизованное хранилище конфигурации сервисов
- ✗Очередь сообщений между сервисами
Что спросят дальше
- Что такое client-side load balancing?
- Чем discovery отличается от config server?
Разбор темы
- Spring Cloud: config, discovery, gateway, tracing
Config Server, Eureka/DiscoveryClient, Spring Cloud Gateway и распределённая трассировка.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.