Microservices - a Macro Perspective
The promised benefits of Microservices have already been proven by tech teams at organizations like Netflix, Amazon and the likes, riding on this success Microservices are increasingly being discussed and implemented as a solution for creating the next generation software systems across the industry.
It is my belief that there is an element of personal influence in the term Microservices that does not necessarily make the solution to a problem wrong, these personal influences range from past experience to overseeing or backlogging certain fundamental principles for Microservices that deflects from the concepts of Microservices and the benefit it offers. So, after doing some simple hands on work, eliminating the personal influence factor and fair bit of learning, I came to the simple realization on the following elementary points that can be used as a dipstick to determine Microservices feasibility:
- Microservices is not a specific technology but an architectural style, think of it as the way to structure an application.
- Each Microservices will ideally do one thing and one thing only in a self-contained fashion – this means all business logic, persistence, deployment etc. will be contained within the context of a Microservices.
- Microservices does not compete with Web services or REST, there is no restriction to not use either, although REST will make more sense due to its light weight nature for a Microservices. Same is the case for database technologies where leading Microservices implementations prefers NoSQL or other light weight databases.
- An idea Microservices should be free of all dependencies, in real world dependencies will exist and Microservices may depend on each other or may share data – thorough considerations need to be given to such cases to determine if related Microservices can be bundled as one in subsequent iterations.
- Each Microservices should be capable of being deployed individually, this allows for higher scalability and performance.
- Ground up Microservices development is a large and ongoing effort, carefully evaluate the need for Microservices towards the problem you are trying to solve.
- Microservices development efforts that relies on COTS systems (e.g. Healthcare Claims systems, ERP etc.) that are not architected as extensible Microservices makes the implementation non-compliant with the Microservices architecture, one may find workarounds but it drifts away from the true spirit of Microservices.
The above point are some macro perspectives, its translation to technical and implementation perspectives is a lot more involved exercise and like all architectural patterns Microservices needs to be discussed, dissected and its applicability evaluated before embarking on the journey to create a Microservices based application, what worked for Netflix may not work for your organization.
[ Initially written by Manish Mehta July 2017 ]