Microservices
Microservices
Cons:
• Communication between microservices can be complex.
• Large numbers of service management is difficult.
• Handling microservices with different business requirements is a tough task.
• So many configurations have to do which increases efforts.
• Network maintenance is difficult.
• Complex development and Security issues.
• Scalable: Based on the requirements, services can be scaled which results in better
scalability.
• Here, we have a server. The server can be Tomcat, jetty, or any type.
• In this server, we have deployed our application.
6
ANKIT KUMAR
• Inside this web application, we need to deploy all the modules of an application.
• The outcome will be a WAR file. Only if we deploy the war file, these modules will
be available.
This is the Monolithic Architecture.
7. Explain SOA.
SOA refers to Service-Oriented Architecture.
• This SOA architecture is a collection of multiple services.
• These multiple services do communicate with each other by using some standardized
protocols.
• Also in this design approach, applications are build as a collection of services that are
loosely coupled.
It communicates with each service over a network and then implements a specific business
function. The communication could be the normal passing of data or more than two services
sharing some common activity or any type of coordination.
7
ANKIT KUMAR
Through some
Within the same Using some
lightweight
application, standardized
protocols, all the
components protocols, services
services
communicate with communicate with
communicate with
each other. each other.
Communication each other.
It also maintains
It maintains centralized It maintains
centralized development and here decentralized
development and the services are development and
components deployed deployed as services deployed
Development and as a single unit. monolithic independently.
Deployment applications.
8
ANKIT KUMAR
10. What are the Main Components of Java Spring Boot Microservices?
The main components of Java Spring Boot Microservices include:
• Services
• Service Registry
• API Gateway
• Cloud Infrastructure
• Containerization and Orchestration
• Message Broker
• Security
• Monitoring
11. Name three commonly used tools for Java Spring Boot Microservices.
There are different tools used for Java Spring Boot Microservices, some important tools are,
1. Docker: This is a containerization tool that allows developers to put applications and
their dependencies in a lightweight container, and provide stability across multiple
environments.
9
ANKIT KUMAR
13. How to Process the Request and Response between Two Services?
By establishing communication between the two services, microservices can handle requests
and responses between any two services using XML (Extensible Mark-up Language) and
JSON (JavaScript Object Notation).
• XML and JSON are data exchange formats and it helps to generate requests and
responses between two services.
• Most important thing is the data exchange format and both the services have to know
the data exchange format to request and respond accordingly.
• If we compare both formats, JSON is very simple to use in Microservices.
10
ANKIT KUMAR
14. What is WebClient and How Java Microservices Communicate using WebClient?
An interface called WebClient represents the primary access point for web requests. It is also
known as Reactive Web Client that is introduced in Spring 5. The new client is a non-
blocking, reactive solution that works over HTTP/1.1 protocol. Also, it is the replacement of
classic RestTemplate. We can use the WebClient for Java Microservices Communication by
the following approach.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
After adding this library, create a Bean for the WebClient in the configuration file like below:
@Bean
public WebClient webClient() {
return WebClient.builder().baseUrl(addressBaseUrl).build();
}
After creating Bean, it is ready for use in the Service Class file. We can refer the below code:
@Service
public class EmployeeService {
// -------------
@Autowired
private WebClient webClient;
11
ANKIT KUMAR
// --------------
// Using WebClient
AddressResponse addressResponse = webClient.get().uri("/address/" +
id).retrieve().bodyToMono(AddressResponse.class).block();
employeeResponse.setAddressResponse(addressResponse);
return employeeResponse;
}
}
The RestTemplate is a synchronous REST client that performs HTTP requests by using a
simple API of template style.
We can use RestTemplate for Java Microservices Communication by the following approach:
@Nullable
public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables)
throws RestClientException {
RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
12
ANKIT KUMAR
16. What is FeignClient and How Java Microservices Communicate using FeignClient?
We can use FeignClient for Java Microservices Communication by the following approach:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
After adding the library, add this @EnableFeignClients annotation to the main Application
file as below:
@SpringBootApplication
@EnableFeignClients
public class Application {
}
13
ANKIT KUMAR
Create an Interface and define it with @FeignClient annotation and declare calling method as
below:
@GetMapping("/address/{id}")
public ResponseEntity<AddressResponse> getAddressByEmployeeId(@PathVariable("id")
int id);
Now it is ready to be used in the service class file. You can see the below code:
@Service
public class EmployeeService {
// -------------
// Using FeignClient
14
ANKIT KUMAR
ResponseEntity<AddressResponse> addressResponse =
addressClient.getAddressByEmployeeId(id);
employeeResponse.setAddressResponse(addressResponse.getBody());
return employeeResponse;
}
17. How Client Side Load Balancing Happens in Java Spring Boot Microservices?
When a load balancer put on the client side along with assigning load balancing
responsibilities to the client, this is called Client-Side Load Balancing. Spring Cloud
LoadBalancer is one of the most popular client-side load balancers offered by Spring Cloud.
Spring Cloud LoadBalancer can be used for Client Side Load Balancing in Microservices by
the following approach:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Client Side Load Balancing can be done with the help of LoadBalancerClient. We need to
write the following logic in our client microservice in the Service class.
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
// Get metadata
String contextPath = serviceInstance.getMetadata().get("configPath");
18. How Load Balancing Happens in Java Spring Boot Microservices using Netflix’s
Ribbon?
Ribbon is a special load balancer provided by Netflix so that we do not have to create this
load balancer or write any code to make this pattern possible. We can only use the Netflix
Ribbon for having the client-side load balancing.
We can use Netflix’s Ribbon for Load Balancing in Microservices by the following approach
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
Annotate your Feign Client interface with @RibbonClient. Refer to the below code snippet.
@GetMapping("/address/{id}")
public ResponseEntity<AddressResponse> getAddressByEmployeeId(@PathVariable("id")
16
ANKIT KUMAR
int id);
address-service.ribbon.listOfServers=http://localhost:8081, http://localhost:8082
19. How Eureka Server and Client Communicate with Each Other in Java
Microservices?
Service discovery is one of the key issues in microservices-based architecture. The Eureka is
Netflix service discovery, consists of a discovery server and a client. The server can be
configured and deployed to maximize performance, with each server copying the status of
registered services to the others.
server.port=5000
Now if we run our microservice then we may get the "Connection refused" error. To fix
this, we have to add the following line in the application.properties file of microservice.
eureka.client.service-url.defaultZone=http://localhost:5000/eureka/
We can develop API Gateway in Java Spring Boot Microservices by using Spring Cloud
Gateway. Spring Cloud Gateway provides a library for creating API gateways over Spring
and Java. It provides a flexible way to submit standards-based requests, while focusing on
contextual issues such as security, resiliency, and monitoring Spring Cloud Gateway features
some of the most important ones are:
• We can integrate the Circuit Breaker with the Spring Cloud Gateway.
17
ANKIT KUMAR
• Path Rewriting.
The Eureka is the Netflix service discovery, consists of a discovery server and a client. The
server can be configured and deployed to maximize performance, with each server copying
the status of registered services to others. To Register and Discover Microservices Using
Netflix Eureka we have to develop one Service Discovery and one Microservice.
22. What is Client Side Service Discovery in Java Microservices and Provide Some
Examples of It?
• In a microservice system, applications perform multiple tasks and that are composed
of many independently deployable services.
• If we put Service Discovery in client side then we called it as Client Side Service
Discovery.
Example:
• Netflix Eureka
• Zookeeper
• Consul
18
ANKIT KUMAR
23. What is Server Side Service Discovery in Java Microservices and Provide Some
Examples of It?
• In a microservice system, applications perform multiple tasks and that are composed
of many independently deployable services.
• If we put Service Discovery in server side then we called it as Server Side Service
Discovery.
Example:
• NGNIX
• AWS ELB
Spring Cloud is a project under which we have many sub-projects. We can solve all these
problems with those sub-projects.
• resilience4j-ratelimiter
25. Explain 5 Major Challenges and Solutions of Java Spring Boot Microservices
Architecture.
There are 5 challenges are mentioned below with solutions that we might face while
developing microservices applications.
o Solution: Circuit Breaker pattern with tools like Hystrix provides fault
isolation and fallback mechanisms.
26. Tell Some Major Reasons to Choose Spring Boot For Microservices Development.
Here are some major reason to Choose Spring Boot For Microservices Development.
• Embedded Server
• Auto Configuration
• Loose Coupling
20
ANKIT KUMAR
• Dependency Management
• Open Source
• Fault Tolerance
• Resilience
• Monitoring
• Failure Isolation
• Fallback Mechanism
• Automatic Recovery
There are different ways to deploy Microservices. Some of them are mentioned below:
• Single Machine, Multiple Services: Buy a server and run microservices as services.
29. What is the Main role of Docker in Microservices and How to deploy microservices
in Docker?
The main role of Docker in microservices is to provide containerization, which allows each
microservice with its dependencies to coordinate with the runtime environment, ensuring
stability in unique environments.
• Step 2: Build Docker images for each microservice using the docker build command.
• Step 3: Push the built Docker images to a Docker registry such as Docker Hub or a
private registry.
• Step 6: Monitor and manage the deployed microservices using Docker CLI
commands or Kubernetes dashboard.
To deploy our microservices application in AWS (Amazon Web Services), we need to follow
the below steps.
• Step 1: In the first step, open the AWS Management Console and then go to EC2.
• Step 2: After that, click on the Load Balancers and create a new Application Load
Balancer. Also, create a new target group associated with that load balancer. Then
define the target group targets (ECS instances) and health checks.
• Step 3: Now, in AWS Management Console, go to ECS and create a new ECS cluster.
22
ANKIT KUMAR