Why your next software project should be Microservices-based?
Manoj Bhaiwal
Product Leader | Consulting CTO | Entrepreneur | Intrapreneur | Biz Strategist
What are Microservices?
There are multiple definitions of a microservice or microservice-based architecture. Rather than worrying too much about the technically highly accurate definition, I'll prefer to define it in simple terms.
Microservices based architecture is dividing a large software application into multiple, individual software modules & components and implementing them as independent services, which can be developed, deployed and managed independently. These services together form a solution/application by communicating with each other over a generic communication channel like internet.
Why use microservices-based architecture?
The microservices-based architecture offers multiple advantages against the traditional monolithic architecture. The following sections highlight the advantages of using microservices-based architecture from different perspectives and concerns of the software-development-lifecycle (SDLC).
Architecture:
Following are architectural advantages from the perspectives like Scalability, Maintainability and Extensibility.
- Highly loosely-coupled modules, implemented as individual microservices.
- High re-usability of the independent microservices, across multiple applications.
- Extreme separation of concerns.
- One is forced to define the API for individual microservices for intercommunication with other microservices. This has multiple advantages of its own.
- Well-defined and well-enforced boundaries between different microservices stops unexpected propagation of defect across different microservices. Thus, impact of a change in one microservice is minimal, if any, on other microservices.
Development:
Following are advantages from the perspective of efficient and faster development.
- Freedom to develop different microservice in different technology!
- One is free to use the technology that best suits the implementation of given functionality of given microservice. This makes the development faster and more efficient.
- Individual Development-Teams can choose the technology of their choosing as per their skillset and preference. This improves the productivity of the team.
- Porting to a new technology-stack is easier, one microservice at a time! This also makes it easy to try out new technology-stack by implementing it for just one (or a few) microservice. The remaining application (microservices) keep working on the older technology-stack, without any integration-issues.
- A good identification and isolation of individual microservices limit the domain-knowledge and business-logic that individual development-teams should possess.
Testability:
Following are advantages from the perspective of the ease of testing the application.
- Individual microservice can be tested individually.
- Testing performance of individual microservice is easier.
- Clear Request-Flow among the microservices makes it further easier to test the application.
- Overall separation of concerns makes it easier to test the application.
Project Management:
Following are advantages from the perspective of project-management.
- Independent Release-Cycles for different microservices.
- Smaller, hence, more manageable teams. Big team-sizes add to the overhead and challenges of the project-management. You remember the "two-pizza rule", don't you?
- Every microservice can be managed as an independent project, making it more manageable.
- Microservices are more DevOps friendly.
- Adding new developers to the team and helping them come up to speed is easier, faster and more efficient due to the limited functionality and domain-knowledge of individual microservices.
Operations:
- Easier to identify the bottlenecks.
- Scale-up only those microservices which need scaling! Now, think of scaling up only a few modules in a monolithic application!
- "One microservice down" is equivalent to "one feature unavailable"! It doesn't take your complete application down.
- High-Availability/Redundancy only for selected microservices is possible.
- Upgrading individual microservices without shutting down the complete application is possible.
Epilogue:
There are many more advantages and further details to it but I wanted to keep it short and concise to avoid overwhelming the readers with too many details, over a broad spectrum. I tried to cover the breadth without getting much into the depth to keep it simple but at the same time be able to intrigue the readers about the topic.
I also avoided too many technical-details to avoid making it a purely technical article only for the technical people.
About the author:
The author has 23+ years of experience in Software Industry with 15+ years as a CTO and Co-founder. As a CTO, the author had been keeping the technology-competency of the companies ahead of the curve by helping the companies with Technology-Strategy and Vision by studying, analyzing and predicting the future trends, if not thought-leading them.
The author is an expert in multiple enterprise technology stacks like .Net, Java and MEAN, having architected many enterprise-grade applications in different domains and industries, making them high-performing, highly-scalable, secure and user-friendly.
The author has 3+ years of experience in architecting and overseeing the development of highly-available and geo-redundant microservices-based, cloud-native enterprise applications, in a public, private and hybrid cloud.
Vice President – SW Engineering at Rockwell Automation USA, Managing Director & Board Member, Plex Systems Pvt. Ltd.
6 年Micro-services concept is Very well explained in simple terms by you Manoj. Also your reply to "Is it OS independent.. .." is well described.
Vice President at Deutsche Bank
6 年Hi Manoj Bhaiwal... Nice article... If you can also add the different aspects of database use, e.g. Same database for each micro service or different or different schema... It will be great... Besides any thought on using kubernet instead of docker?
Solution Architect @ R3 | AWS Certified Solution Architect | Blockchain & Digital Currencies
7 年Very useful and a nice concise description, Manoj ! I am sceptical about the point "communicating with each other over a generic communication channel like internet". Though technically possible, I think this should be a separate application interface and not a communication between microservices belonging to same application. Please do let me know your thoughts.
Driving Innovation in IoT & InsureTech | Pioneering Transformative Solutions at QuicSolv Technologies | Passionate Advocate for Societal Betterment
7 年Excellent thoughts as always, Manoj!! I am sure that this approach will help to boost the responsiveness to business needs by creating a bimodal capability. Bimodal is the ability to manage two diverse models of software delivery, where one model focusses on security and accuracy while the other model allows nonlinear agility and speed.
Senior Specialist - Data Engineering @ LTIMindtree
7 年Thanks Sir...