At OpsTree, our mission has always been about ‘Simplifying DevSecOps & Sharing Knowledge’ and staying true to our ethos, here in this blog, I’ve tried to summarise in the most simplistic terms, some of the propelling motivations behind the adoption of micro services and making it successful !
I see huge interest amongst various business leaders and our clients to adopt or migrate to a Microservice architecture. Thankfully, I am old enough in the world of Software Craftsmanship to have witnessed how these patterns have evolved over the years :
- Starting from Huge Monoliths based on amazing frameworks like Spring
- Then Migration to semi scalable architecture called SOA
- And then to fully scalable modular architecture called Microservice Architecture
- And the Journey is still on.
I have also been in the heated debates of these transitions and have seen one win over another. The transitions were driven by paradigm shifts in the nature, scale and magnitude of the tech problem rather than the inherent issues or fallacies in the preceding architectural approaches. I have also seen few next gen adoptions happening more due to technical urge and prowess rather than the business needs. Such adoptions have failed miserably and would have been better off adopting the older ways as they were still solving older problems.
I strongly believe that the evolution of these architectural patterns was largely driven by a change in need rather than their inherent issues or fallacies! In fact, any design being good or bad is always in the context of the problem it is solving.
Captured here is a glimpse of the problems that microservices can solve and how !
Problem 1: Can we “Make the elephant dance”? Modularity is the key!
As systems succeed they start becoming large. Large means complex and how complex — like a bowl of spaghetti. Once that happens, even simple change becomes difficult as the system itself is so complex. Hence, designing systems with a Modular mindset is a must — the base representation of which can be a Class in the OOPS world and its pinnacle in today’s world is a microservice. The decision has to be taken carefully and if done well the Elephant can definitely dance.
The microservice ecosystem consists of a powerful group of functionalities encapsulated in individual microservices. They communicate with each other over a defined contract. This means, as long as the contract is valid the implementations can change without impacting other microservices.
Give this freedom to a Monolith developer and they will attain Nirvana! And, if you can make the elephant dance, here are the benefits that you can derive:
- Easy change management
- Comprehensive functionality testing
- Quick feedback incorporation and responsiveness
- Ability to ship changes at desired frequency
Problem 2: Individual Attention and Focus — A must for happy functionalities!
From static websites and simple computations to eCommerce behemoths and Intelligent Assistants- the world of software has gone through tremendous change. As businesses are setting up ambitious goals of solving very complex business problems; so to strike the right note of perfection it becomes inevitable to pay individual attention and focus on every functionality. Right language, right data store, right libraries, right developers, right infrastructure, right autoscaling, right security, and the list goes on and on…
Encapsulating the modular functionalities of a whole into smaller microservices gives the right freedom to teams to develop, deliver and deploy independently, with the following benefits:
- Complete focus and hence accountability of a small dedicated team
- Deep expertise and domain knowledge-based outcomes
- Option to identify individual excellence which can then be cross-pollinated
- Option to choose the best language, tools, and libraries available for the functionality implementation
- Best data store options (SQL or NoSQL) etc
- Define best-suited infrastructure and scalability parameters
Problem 3: Managing Availability & Reliability — More stability and less flux!
Today’s application systems are way more complex and have become a tightly knit part of our daily lives. For such mission-critical applications Availability and Reliability is an absolute necessity. Fresh from my memory — 30 mins of Google blackout and the havoc it created!
Microservices can save us from — ‘we sail together; we sink together’ paradigm of Monoliths!! With clear focus, it’s possible to implement systems that are designed for Availability. Failures are inevitable, but we can choose to ring fence them OR allow them to create a domino effect. Stress and load variations on a system often form a predictable pattern. At certain hours of the day, certain days of the week, and in certain periods of the year, the load variations are much more than normal. Systems should be able to meet these demands with the least manual intervention and with complete reliability.
Microservice approach and associated tooling are inherently geared towards achieving these goals only if the team has the right focus on Availability and Reliability, which can ultimately lead to:
- Highly available systems
- Controlled failures with quick recoveries and rollbacks
- Resilient systems with the ability to scale up and down without manual intervention
- Modularized deep observability settings leading to low MTTR
Problem 4: Making Functionalities Reusable, not just code — Stop reinventing the wheel!
Reusable code has always been in the reckoning, but re-usable functionalities have appealed to the businesses like never before. Imagine the re-usability of ‘payment service’ at Amazon and its usage across the entire Amazon ecosystem! Reusable functionality is the fundamental tenet of the Microservice way of development. Individual services or a set of services can be designed to independently deliver functionality for a host of different sets of consumers over a defined set of contracts.
Here are some benefits that you can achieve with this philosophy of ‘Products over projects’
- Centralised knowledge and functionality that can be leveraged for multiple features.
- Repeatable dependable functionality with better ROI.
“By breaking the whole system or application into smaller independent components, Microservices help to achieve reduced duplication and increased cohesion, thus making the overall system parts easier to understand, more scalable, and easier to change.” -Lucas Krause
Competition from startups along with increased customer expectations is what compels established organisations to ponder and think over new strategies to deliver their services and offerings. So, in order to compete and outperform in the modern age, businesses need software architectures that are agile, adaptive, and extensible. Micro services brings it all !
However, to gain the desired outcomes from your microservices applications, there also emerges a need for a robust underlying platform for the application delivery, that enables Infrastructure creation, Kubernetes clusters management, security, Configuration management, Macro & micro CI-CD pipelines, observability — essentially everything that is needed to take that modularised code from a developer’s workstation, all the way to Production environment and managing it well there !
In BuildPiper, we have created this platform to enable the development teams to be able to Go-Live with Micro services Apps in under a day with 10X reduced time & investments required to onboard & securely manage Kubernetes & micro services application setup and deployments with highly empowered developers and reduced people dependency.
So, go on and make the Microservices journey of your product a hugely rewarding one with BuildPiper ! Wishing you the best and helping you to Unlock the great power of Microservices!!!!
Buildpiper is an End to End Microservices Delivery Platform.