Spring Boot - Different systems( eureka , zuul, ribbon, nginx,) used for what?

vipin cp picture vipin cp · Oct 16, 2018 · Viewed 11.2k times · Source

I have been working with spring and now would like to learn spring boot and microservices. I understand what microservice is all about and how it works. While going through docs i came across many things used to develop microservices along with spring boot which i am very much confused.

I have listed the systems below.and the questions:

  1. Netflix Eureka - I understand this is service discovery platform. All services will be registered to eureka server and all microservices are eureka clients. Now my doubt is , without having an API gateway is there any use with this service registry ? This is to understand the actual use of service registry.
  2. ZUULApi gateway- I understand ZUUL can be used as API gateway which is basically a load balancer , that calls appropriate microservice corresponding to request URL. iS that assumption correct? will the api gateway interact with Eureka for getting the appropriate microservice?

  3. NGINX - I have read NGINX can also be used as API gateway? Is that possible? Also i read some where else like NGINX can be used as a service registry , that is as an alternate for Eureka ! Thus which is right? Api gateway or service registry or both? I know nginx is a webserver and reverse proxies can be powerfully configured.

  4. AWS api gateway - Is this can also be used as an alternate for ZUUL?

  5. RIBBON - for what ribbon is used? I didn't understand !

  6. AWS ALB- This can also be used for load balancing. Thus do we need ZUUL if we have AWS ALB?

Please help

Answer

Jose Martinez picture Jose Martinez · Oct 16, 2018

without having an API gateway is there any use with this service registry ?

Yes. For example you can use it to locate (IP and port) of all your microservices. This comes in handy for devops type work. For example, at one project I worked on, we used Eureka to find all instances of our microservices and ping them for their status (/health, /info).

I understand ZUUL can be used as API gateway which is basically a load balancer , that calls appropriate microservice corresponding to request URL. iS that assumption correct?

Yes but it can do a lot more. Essentially because Zuul is more of a framework/library that you turn into a microservice, you can code it to implement any kind of routing logic you can come up with. It is very powerful in that sense. For example, lets say you want to change how you route based on time of day or any other external factors, with Zuul you can do it.

will the api gateway interact with Eureka for getting the appropriate microservice?

Yes. You configure Zuul to point to Eureka. It becomes a client to Eureka and even subscribes to Eureka for realtime updates (which instances have joined or left).

I have read NGINX can also be used as API gateway? Also i read some where else like NGINX can be used as a service registry , that is as an alternate for Eureka ! Thus which is right? Api gateway or service registry or both?

Nginx is pretty powerful and can do API gateway type work. But there are some major differences. AFAIK, microservices cannot dynamically register with Nginx, please correct me if I am wrong... as they can with Eureka. Second, while I know Nginx is highly (very highly) configurable, I suspect its configuration abilities do not come close to Zuul's routing capabilities (due to having the whole Java language at your disposal within Zuul to code your routing logic). It could be the case that there are service discovery solutions that work with Nginx. So Nginx will take care of the routing and such, but service discovery will still require a solution.

Is this can also be used as an alternate for ZUUL?

Yes AWS API Gateway can be used as a Zuul replacement of sorts. The issue here, just like Nginx, is service discovery. AWS API Gateway lets you apply logic to your routing... though not as open ended as Zuul.

for what ribbon is used?

While you can use the Ribbon library directly, for the most part consider it as an internal dependency of Zuul. It helps Zuul do the simple load balancing that it does. Please note that this project is in maintenance mode and not recommended any more.

This can also be used for load balancing. Thus do we need ZUUL if we have AWS ALB?

You can use ALB with ECS (elastic container service) to replace Eureka/Zuul. ECS will take care of the service discover for you and will map all instances of a particular service to a Target Group. Your ALB routing table can then route to Target Groups based on simple routing rules. The routing rules in ALB are very simple though, but improving over time.