What is Monolith and Microservices architecture?
Tags: microservices, monolith, programming, learning
Published: 2023-05-16 12:51:15

Recently, Amazon announced they **saved costs by 90%** after shifting from microservices to the monolith architecture for Amazon prime video,  Consequently, I got a question what are _monolith_ and _microservices_ ? then I start to research on it and create this beautiful summery so enjoy it, 

Microservices and monoliths are two different architectural approaches for designing and building applications. Let's explore each of them:


**Monolith**:

A monolithic architecture refers to an application that is built as a single, self-contained unit. It means everything in the application is tightly connected and deployed together. So, if you want to make any changes or updates, you have to redeploy the whole thing.

Imagine it like a massive LEGO structure where all the blocks are glued together. You can't remove or modify just one block without affecting the entire structure. It's like a giant, inseparable entity.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftzi3kj284fwmmo5uuul.gif)



In this monolithic architecture, the different parts of the application, like the presentation layer, business logic layer, and data access layer, are all intertwined. They communicate with each other through method calls or shared libraries. So, if one part needs more resources or scaling, you have to scale the entire monolith, even if other parts don't really need it.

**Example:** It's like having a pizza with all the toppings fused together into one big, delicious slice. You can't separate the cheese, pepperoni, and mushrooms - it's all mixed up! So, if you want extra cheese, you'll end up with extra pepperoni and mushrooms too, whether you like it or not.

**Microservices**:

Microservices architecture, on the other hand, is an architectural style where an application is composed of small, loosely coupled, and independently deployable services. Each service represents a specific business capability and is responsible for a well-defined set of functionalities.

In a microservices architecture, services communicate with each other through lightweight protocols such as HTTP/REST or messaging queues. Each service can be developed, deployed, and scaled independently, allowing for flexibility and scalability. Teams can work on different services simultaneously, using different technologies and programming languages if needed.

Microservices enable better isolation of concerns, independent scaling, faster deployment cycles, and improved fault tolerance. However, they introduce additional complexities such as inter-service communication, service discovery, and distributed data management.

**Example:**  In a microservices architecture, the e-commerce application would be divided into separate services, each responsible for a specific functionality.

For instance, you could have individual microservices for user management, product catalog, shopping cart, order processing, and payment processing. Each microservice would have its own codebase, database, and API. They could communicate with each other using lightweight protocols like REST or message queues.


Comparing Microservices and Monolith:

Microservices architectures offer several benefits over monolithic architectures:

1. Scalability: Microservices allow for fine-grained scalability, where only the specific services experiencing high demand can be scaled independently. In contrast, scaling a monolithic application typically requires scaling the entire application, including components that may not require additional resources.
2. Independent Deployment and Development: Microservices enable independent deployment of services, which means that teams can work on and release services autonomously. This results in faster development cycles, easier maintenance, and the ability to adopt different technologies for different services.
3. Fault Isolation: In a monolithic architecture, a failure in one component can affect the entire application. In a microservices architecture, failures are isolated to individual services, limiting the impact on the overall system.

However, adopting a microservices architecture also introduces challenges, such as managing inter-service communication, handling distributed data management, and ensuring consistency across services.

The choice between microservices and monolith depends on various factors, including the size and complexity of the application, scalability requirements, development team structure, and organizational constraints. Each approach has its strengths and trade-offs, and the decision should be based on careful consideration of the specific requirements and constraints of the project.