Для чего используется Eureka в Spring Cloud
Что проверяют
Понимаете ли вы задачу service discovery и роль Eureka в ней, а не только набор аннотаций. Следом спрашивают, что будет при падении экземпляра, кто на самом деле балансирует нагрузку и нужна ли Eureka в Kubernetes.
Как отвечать
Eureka это реестр сервисов из Spring Cloud Netflix. Адреса экземпляров в микросервисах постоянно меняются, прописывать их в конфиге нельзя, поэтому сервисы сами регистрируются в реестре, а клиенты находят друг друга по имени.
- Eureka Server: приложение со стартером
spring-cloud-starter-netflix-eureka-serverи аннотацией@EnableEurekaServer, по соглашению на порту 8761. Для отказоустойчивости поднимают несколько узлов, они реплицируют реестр друг другу; - Eureka Client: стартер
spring-cloud-starter-netflix-eureka-client. Сервис регистрируется под именем изspring.application.name, адрес сервера задаётсяeureka.client.service-url.defaultZone. Аннотация@EnableDiscoveryClientдавно не обязательна, достаточно стартера; - heartbeat и вытеснение: по умолчанию клиент продлевает аренду раз в 30 секунд, сервер удаляет экземпляр после 90 секунд без продлений. Клиенты кэшируют реестр и обновляют его тоже раз в 30 секунд;
- self-preservation: если продления пропали массово, сервер считает, что сломалась сеть, и перестаёт вытеснять записи. Eureka выбирает доступность в ущерб точности.
Балансирует не Eureka, а клиент: Spring Cloud LoadBalancer выбирает экземпляр из списка. Этим пользуются RestTemplate или WebClient.Builder с @LoadBalanced, @FeignClient(name = "orders") в OpenFeign, маршруты lb://orders в Spring Cloud Gateway. Ribbon из Spring Cloud давно удалён.
Где спотыкаются
Говорят, что Eureka сама балансирует и мгновенно убирает упавший сервис. На деле клиенты ещё какое-то время ходят на мёртвый экземпляр, поэтому нужны ретраи и таймауты.
Путают свойства: пишут в конфиге клиента spring.cloud.discovery.client.serviceUrl, которое Eureka не читает, и сервис молча не регистрируется.
Не знают альтернатив. В Kubernetes обнаружение уже дают Service и DNS кластера, отдельная Eureka там обычно лишняя, а вне кластера с ней конкурируют Consul и Zookeeper.