In this post, we will talk about server-side load balancing With Zuul and Eureka. Let us take a while and understand what is meant by server-side load balancing. In simple word, we distribute our user requests. In a Spring Cloud MicroServices ecosystem load balancing is an important and common functionality .
Zuul acts as a gateway for requests from websites, mobile devices to the backend of your service. Zuul is an edge service that provides dynamic routing, monitoring, resiliency, security, and many more features.
How Server Side Load Balancing Works With Netflix Zuul and Eureka
The amount of high traffic sometimes results in complex production issues. We want a system that can rapidly react to these changes. This technique was used when a new page from the website needed tuning for a smaller set of mobile devices or a group of customers.
If Performance problems, as well as unexplained errors, were observed. It was difficult to debug the issues because the problems were only happening for a small set of customers or a small set of devices. By diverting the traffic to a single instance, it becomes easier to debug in real time. It is done using Zuul filters in a netflix Zuul Load balancer. Zuul uses different types of filters that we can implement for various purpose, read more about this here.
Note:- Visit this Site to Understand More about Basics Of Java and Collections.
Some Must Read Posts
2.Project Setup:-
We are going to set up and run three projects.
- Eureka Service Discovery – Service Registry for Our Backend Services. Please have a look at our previous example about Creating Eureka Service Discovery.
- Customer Service – A rest API which is basically a backend service in a real-time scenario. Visit my previous post about Writing Service Rest With Spring Boot.
- Zuul Gateway – API Gateway to serve requests and call our internal backend services.in this case, it acts as a proxy and calls our customer service Internally.
3.Configure Zuul Communicating With Eureka
Now we have to Configure our Zuul to Communicate with Eureka Server and mark our application as Zuul Proxy . To do this we need to use @EnableZuulProxy
annotation in our main application file.
Add the following configuration in your application.yml
file.
spring:
application:
name: proxy-service
server:
port: 8060
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} ${LOG_LEVEL_PATTERN:-%5p} %m%n"
zuul:
routes:
customer:
path: /customer/**
serviceId: customer-service
Here we are registering our proxy server to Eureka service Registry assuming eureka running on 8761 port. Our Proxy Server will run on 8060.
We also configured routes for our Zuul proxy. We already have our customer service registered with Eureka Registry. Hence we now have just configured the routes to access the customer service.customer-service
the name of the service we registered.
Once Zuul receives a request for a particular service , it internally uses Netflix Ribbon to lookup for services available from Eureka Service Discovery.
Have look , how we can setup Eureka server and client .
We can run multiple instances of our rest service and our API gateway will use both of the instances in round robin fashion.