Microservices Tutorial: What is, Architecture and Example
โก Smart Summary
Microservices is a service-oriented architecture pattern in which an application is built as a collection of small, independent service units. This resource explains monolithic versus microservice architecture, their differences, challenges, SOA comparison, popular tools, and best practices.
What are Microservices?
Microservices is a service-oriented architecture pattern wherein applications are built as a collection of various smallest independent service units. It is a software engineering approach that focuses on decomposing an application into single-function modules with well-defined interfaces. These modules can be independently deployed and operated by small teams that own the entire lifecycle of the service.
The term “micro” refers to the sizing of a microservice, which must be manageable by a single development team (5 to 10 developers). In this methodology, big applications are divided into the smallest independent units.
What is Monolithic Architecture?
In layman’s terms, you can say that Monolithic architecture is like a big container in which all the software components of an application are clubbed into a single package. Let us discuss an example of an eCommerce store in the context of a Monolithic architecture.
Monolithic Architecture of eCommerce Application
In any e-commerce application, there are some standard features like Search, Review & Ratings, and Payments. These features are accessible to customers using their browser or apps. When the developer of the eCommerce site deploys the application, it is a single Monolithic unit. The code for different features like Search, Review & Ratings, and Payments are on the same server. To scale the application, you need to run multiple instances (servers) of these applications.
What is Microservice Architecture?
Microservice Architecture is an architectural development style that allows building applications as a collection of small autonomous services developed for a business domain. It is a variant of structural style architecture that helps arrange applications as a loosely coupled service collection. The Microservice Architecture contains fine-grained services and lightweight protocols.
Let us take an example of an e-commerce application developed with microservice architecture. In this Microservices architecture example, each microservice is focused on a single business capability. Search, Rating & Review, and Payment each have their instance (server) and communicate with each other.
Microservices Architecture
In the Monolithic Architecture, all the components coalesce into a single module. But in Microservices Architecture, they are spread into individual modules (microservices) which communicate with each other, as shown in the Microservices example above.
The communication between microservices is a stateless communication where each pair of request and response is independent. Hence, Microservices can communicate effortlessly. In the Microservice Architecture, the data is federated. Each Microservice has its separate data store.
Microservices vs. Monolithic Architecture
| Microservices | Monolithic Architecture |
|---|---|
| Every unit of the entire application should be the smallest, and it should be able to deliver one specific business goal. | A single code base for all business goals. |
| Service startup is relatively quick. | Service startup takes more time. |
| Fault isolation is easy. Even if one service goes down, others can continue to function. | Fault isolation is difficult. If any specific feature is not working, the complete system goes down. To handle this issue, the application needs to be re-built, re-tested, and re-deployed. |
| All microservices should be loosely coupled so that changes made in one do not affect the other. | Monolithic architecture is tightly coupled. Changes in one module of code affect the other. |
| Businesses can deploy more resources to services that are generating higher ROI. | Since services are not isolated, individual resource allocation is not possible. |
| More hardware resources could be allocated to the service that is frequently used. In the e-commerce example above, more users check the product listing and search compared to payments, so more resources could be allocated to the search and product listing microservice. | Application scaling is challenging as well as wasteful. |
| Microservices always remain consistent and continuously available. | Development tools get overburdened as the process needs to start from scratch. |
| Data is federated. This allows individual Microservices to adopt a data model best suited for their needs. | Data is centralized. |
| Small focused teams. Parallel and faster development. | Large team and considerable team management effort is required. |
| Change in the data model of one Microservice does not affect other Microservices. | Change in data model affects the entire database. |
| Interacts with other microservices by using well-defined interfaces. | Not applicable. |
| Microservices work on the principle that focuses on products, not projects. | Puts emphasis on the entire project. |
| No cross-dependencies between code bases. You can use different technologies for different Microservices. | One function or program depends on others. |
Microservice Challenges
- Microservices rely on each other, and they will have to communicate with each other.
- Compared to monolithic systems, there are more services to monitor which are developed using different programming languages.
- As it is a distributed system, it is an inherently complex model.
- Different services will have their separate mechanism, resulting in a large amount of memory for unstructured data.
- Effective management and teamwork are required to prevent cascading issues.
- Reproducing a problem will be a difficult task when it is gone in one version and comes back in the latest version.
- Independent deployment is complicated with Microservices.
- Microservice architecture brings plenty of operations overhead.
- It is difficult to manage the application when new services are added to the system.
- A wide array of skilled professionals is required to support heterogeneously distributed microservices.
- Microservice is costly, as you need to maintain different server space for different business tasks.
SOA vs. Microservices
SOA services are maintained in the organization by a registry which acts as a directory listing. Applications need to look up the services in the registry and invoke the service. In other words, SOA is just like an orchestra where each artist is performing with his/her instrument while the music director gives instructions to all.
On the other end, Microservices is a form of service-oriented architecture style wherein applications are built as a collection of different smaller services instead of one software or application. Microservices is just like a troupe where each dancer is independent and knows what they need to do. So, if they miss some steps, they know how to get back on the correct sequence. Here is a detailed comparison between SOA and Microservices.
| Parameter | SOA | Microservices |
|---|---|---|
| Design type | In SOA, software components are exposed to the outer world for usage in the form of services. | Micro Service is a part of SOA. It is an implementation of SOA. |
| Dependency | Business units are dependent. | They are independent of each other. |
| Size of the Software | Software size is larger than any conventional software. | The size of the Software is always small in Microservices. |
| Technology Stack | The technology stack is lower compared to Microservice. | Microservice technology stack could be very large. |
| Nature of the application | Monolithic in nature. | Full stack in nature. |
| Independent and Focus | SOA applications are built to perform multiple business tasks. | They are built to perform a single business task. |
| Deployment | The deployment process is time-consuming. | Deployment is straightforward and less time-consuming. |
| Cost-effectiveness | More cost-effective. | Less cost-effective. |
| Scalability | Less compared to Microservices. | Highly scalable. |
| Business logic | Business logic components are stored inside a single service domain, with simple wire protocols (HTTP with XML or JSON) and API driven with SDKs/Clients. | Business logic can live across domains, with enterprise Service Bus-like layers between services (Middleware). |
Microservices Tools
1) Wiremock: Testing Microservices
WireMock is a flexible library for stubbing and mocking web services. It can configure the response returned by the HTTP API when it receives a specific request. It is also used for testing Microservices.
Download link: http://wiremock.org/
2) Docker
Docker is an open-source project that allows us to create, deploy, and run applications by using containers. By using these containers, developers can run an application as a single package. It allows you to ship libraries and other dependencies in one package.
Download link: https://www.docker.com/
3) Hystrix
Hystrix is a fault-tolerance Java library. This tool is designed to separate points of access to remote services, systems, and third-party libraries in a distributed environment like Microservices. It improves the overall system by isolating the failing services and preventing the cascading effect of failures.
Download Link: https://github.com/Netflix/Hystrix
Best Practices of Microservices Architecture
- Separate data store for each Microservice.
- Keep code at a similar level of maturity.
- Separate build for each Microservice.
- Always treat each server as stateless.



