Microservices Design Patterns

Today there is a growing demand for microservices in the market. It has become a go-to solution to build APIs and application. Designing microservices may also have architectural challenges. To avoid any design based difficulty in future a developer must know some common microservices design patterns for building microservices.

What are MicroServices?

It is an implementation of a functionality in the form of service, which is self contained and implements a single business capability.

Principles Behind Microservices

You need to know on what principles microservices are designed and architectured.

  1. Resilient Services – one service goes down, entire application doesn’t go down.
  2. Scalability
  3. Independent and Autonomous Services
  4. Availability – services are available 24×7
  5. Decentralization – control is not at one place, its segregated
  6. Real Time Load Balancing –
  7. Seamless API Integration and continous monitoring
  8. Isolation from Failures – error in one service will not affect others

Design Patterns

1. Aggregator

Collects Related Items of Data and displays them Based on DRY principle.

An aggregator design pattern is design in which it invokes various other microservices which further has different data stores from which they fetch required data. Then show the aggregated data.

2. API Gateway

API Gateway acts as an entry point to forward the clients requests to appropriate microservices. Then, with the help of the load balancer, the load of the request is handled and the request is sent to the respective services.

3. Chained Or Chain of Responsibility

Produces a single output which is a combination of multiple chained outputs. Request passed to all the services and output is collected from all services.

4. Asynchronous Messaging

All the services can communicate with each other, but they do not have to communicate with each other sequentially.

5. Database Or Shared Data

DB can be per service Or shared database

6. Event Sourcing

Creates Events Regarding the changes in the application state.

7. Branch

Branch microservices design pattern is that in which you process the requests and response from two or more independent microservices.

8. CQRS ( Command Query Responsibility Segregator)

In this design pattern the application will be divided into 2 parts, Command and the Query.
The Command part will handle CRUD operations and the Query part will handle the materialized views.

9. Circuit Breaker

This design pattern is basically to handle fail scenarios of the microservices, for instance if a service it down, the system will still request and wait for response, but using circuit breaker pattern, after receiving consecutive failures in response, the system will trip and any further request made to this service will fail, this will save performance of the system.

10. Decomposition

It is always a good idea to break your application into small units. With the help of this pattern, either you can decompose an application based on business capability or on based on the sub-domains.
Vine Pattern or the Strangler Pattern further helps in decomposing big monolithic applications into small units.

Summary

In this article, we learnt about Microservices Design patterns for microservices development and its importance, we also read about principles behind microservices and had a look at various types of design patterns.

I hope you liked it !