Microservice Resiliency

Eureka

https://github.com/jeffgbutler/microservice-workshop-java/

https://jeffgbutler.github.io/microservice-workshop-java/

What is Eureka?

  • Eureka is a service discovery system
  • Eureka originated at Netflix
  • Spring Cloud Netflix has integrated Eureka into Spring
  • Web services register themselves with a Eureka Server
  • Web service clients look up service addresses from the Eureka server
  • This solves the problem of hard-coded URLs in the Feign clients

Configuring a Eureka Server

  • "Eureka Server" is a dependency in the Spring Initializr
  • Build a new project with only the "Eureka Server" dependency
  • Add @EnableEurekaServer to the main Spring Boot class
  • That's, basically, it
  • Eureka server is also built into Pivotal Cloud Foundry with the Spring Cloud Services tile

Configuring Eureka Clients

  • "Eureka Discovery" is the dependency in the Spring Initializr
  • Web services are automatically registered with a Eureka server
  • Feign clients will lookup endpoints from Eureka if we simply remove the url attribute of @FeignClient
  • That's, basically, it

Service Names and Granularity

  • The name of the service is taken from the spring.application.name property. This property is specified in bootstrap.yml by convention
  • The name attribute of a @FeignClient annotation specifies which service to lookup
  • This is a lookup for a base URL for all services in an application - it is not a granular service catalog

What is Ribbon?

  • Ribbon, another Netflix project, is a client side load balancer
  • Ribbon is a transitive dependency of Eureka Discovery (it comes along for free)
  • Multiple service instances can register themselves in Eureka with the same name
  • When there are multiple service instances, Ribbon will load balance between them
  • If you have another load balancing strategy (like PCF scaling), then you can disable Ribbon on the clients
  • Ribbon is in maintenance mode currently and will be replaced by Spring Cloud Loadbalancer. This should be transparent to most users

Exercise

  • Create a Eureka Server
  • Alter the services so they will register with the Eureka server
  • Alter the aggregator service so it will lookup endpoints from the Eureka server