Is Micro-services the future
I think it is important for us to understand what they are, their benefits, when to use or not use them, and why they are important for us in the industry today.
We need to understand that the micro-service architectural style is an approach to developing a single application, it is a framework which believes in developing non monolithic applications.
Large monoliths are broken down in to many small services which can function on their own and if some service is not working then the entire application is not brought down rather that particular service is brought down and allows the system to function perfectly fine, meaning minimal inter-dependencies with other components.
Micro-services is an engineering approach focused on decomposing an application into single-function modules with well defined interfaces which are independently deployed and operated by small teams who own the entire life-cycle of the service.
There is no specific standards or guidelines on how small each micro-service should be. But there are guidelines for the scope, implementation, and deployment of micro-services. A micro-service must be designed to be independent of other micro-services and does just one thing. Therefore, it could be deployed or fail without impacting the rest of application.
It uses as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.
We see that these services are built around business capabilities and independently deploy(able) by fully automated deployment machinery.
There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
Automation is key to the success of any micro-services project, migrating to a micro-services architectural style might require changes in the development and operation organizations.
Micro-services accelerate delivery by minimizing communication and coordination between people while reducing the scope and risk of change
So my conclusion is that while it is perfectly fine to think about micro services and look at designing non monolithic applications but at the same time a careful and conscious assessment needs to be done on the state of the infrastructure of the applications, their complexities, integration before a final call is made on deciding to go for this approach. It is very important that we provide the right set of tools, assets and mindset for the team developing with this approach and make them independent to take the maximum benefit of this architecture approach.