Here’s my quick take on what Microservice based architecture provides us and how to progress towards it. Microservices primarily introduce three major desirable characteristics of a system.
- Speed - How quickly changes/features can be implemented
- Safety - Ability to make changes with lowered risk
- Scale - Ability to take large work-load
- Above three qualities of Microservice architect makes it very desirable for existing computing needs of most of today’s platforms.
Implementation of a Microservice also result in below listed benefits.
Lesser dependency on external/other teams. As each MS stands as a is unit on it’s own, it can designed to be fault tolerant. Allows many projects to run the same time. Support multi platform implementation. Developers/Designers can choose the technology which is best for each type of work and there is no need to have a single technology across all the components. ( as in case of a monolithic architecture ) finer control over each service and it’s instance allows granular degradation/replacement of a service. It’s no longer require to change/impact services that do not need a change to be changed anyways as they are part of a larger app/platform. Within the developer community, promotes innovation as localized decisions can be taken Each service can be tunned to characteristics that are important. Some can have higher availability, some can be tuned for higher execution speed etc. No longer needed to assume large risk in the one big rollout/implementation So how should we go about implementing a microservices solution. As strange as it sounds, it’s preferable to first develop a monolith. So for us who already have it in place in a form of a legacy platform..that work is already done. :)
When aiming for a microservice development, consider following factors
- The solution - big picture
- Service - nuts and bolts
- Process and Tools
- Work culture
- Organizational support and levers
Path from Monolith to a microservice based platform is not a one shot conversation. It’s much better to do it in a iterative mode, identifying optimization needs, develop the governing principles and iterate over it. Observe the outcome of such a small chunk implementation and refine and adjust it. This way a existing monolith application can be chipped away and can make way for a more sustainable and efficient microservices platform.