DEV Community

Cover image for Investigating the Evolution of Microservices Architecture
temirlankassym
temirlankassym

Posted on

Investigating the Evolution of Microservices Architecture

I believe that almost every software enthusiast has at least once heard about microservices architecture or monolithic approaches. These two approaches mainly form software architecture in the modern world.
Today let’s consider microservices architecture. I’ll start with the basic definition, then we will move on to analyzing the reasons to use it. Then I will consider some adoption strategies and patterns, to successfully implement microservices architecture in our systems. After that I’ll give some list of best practices concerning the microservices architecture after you adopt it, in order to achieve the full potential of this architecture style. In the end let’s try to predict future directions and challenges in evolution of microservices architecture.
I'm excited to share my first post here — your feedback is warmly welcomed


Part 1. Literature Review


So what is microservices architecture?
Microservice architecture - is an architectural style that structures an application as a collection of services that are: Independently deployable and Loosely coupled. It is more understandable to consider microservices with comparing it to monolithic architecture

Image description

As you can see, Monolithic architecture consists of a single large block, while microservices architecture includes multiple services. So the main idea behind it - is to divide apps into small services around some business responsibilities. Each service is often owned by a single, small team. Enables an organization to deliver large, complex applications rapidly, frequently, reliably and sustainably.

Now when we understand what is a main principle behind microservices architecture let’s distinguish some key characteristics of such approach

The key characteristics of Microservices-driven apps

Decentralized architecture. There’s no such thing as centralization regarding microservices architecture. I believe that without it the idea of microservices could never be realized
Great scalability. Because we can simply add or delete any microservice without significant problems, it helps with scaling your system

API-based Communication. Microservices communicate with each other using API. It means microservices can be developed using different technologies, languages, and even operating systems promoting flexibility.

Failure resistance. Every microservice is independent of each other. That means, because they are isolated the risks of system failure are very minimal

Fast Development time. Because each one of the services requires small team or even only one person, system can be developed and managed in short amount of time

Decentralized Data Management. Each microservice has its own data. It reduces the complexities associated with a centralized database structure.

Incorporation of different technologies. Teams can choose technologies that are best suited for their particular cases. In that way, developers have a lot of flexibility

Let’s check out the comparison of the time required to launch an app with the microservice vs monolith architecture. Launching a monolith application with basic functionality requires less effort and time. But when an app evolves, maintaining and developing new features becomes very hard

Image description

After we have some knowledge about key principles of microservices architecture, we would like to try to implement it. But it's a very complex task. Do we have any real world cases of adopting large monolithic architecture into microservices architecture? Yes, there are a lot of interesting examples.

Real-world examples of microservices adoption

Image description

Amazon — over 1000 microservices

Netflix — over 700 microservices

Uber — over 500 microservices

Amazon initially was built as a monolith because creating and launching an app with a monolithic architecture is quite easy. However, the company started growing rapidly, so it needed to develop many new features and scale its online platform fast.
This enabled us to create a very highly decoupled architecture

Rob Brigham
Head of Product, AWS Developer Tools

Netflix seems like one of the youngest business cases of microservices adoption. Initially this app was a monolith. Then service became popular and started growing extremely fast.

Netflix has been building and evolving a robust microservice architecture in AWS. Our microservice architecture decouples engineering teams from each other, allowing them to build, test and deploy their services as often as they want.

Netflix
Netflix Technology Blog

Uber started growing very rapidly, it experienced a lot of challenges with scaling its services. The monolithic architecture needed developers to redeploy the codebase again and again to implement new changes. Even minor changes affected the entire codebases.

As a result, we adopted a microservice architecture. Ultimately our systems became more flexible, which allowed teams to be more autonomous.

Uber
Uber Technologies Inc


Part 2. Analyzing Adoption Patterns


Now after we see that even large companies successfully transfomed their complex and hard monolith systems into microservices architecture, we can discuss common adoption patterns

Industry-specific Variations
Different industries may adopt microservices differently based on their specific needs, regulations, and challenges

Technology Stack
Experimenting with different technologies used for microservices, such as containerization platforms (e.g., Docker, Kubernetes) and communication protocols (e.g., REST, gRPC)

Organizational Size
The adoption patterns might vary based on the size of the organization, with larger enterprises facing different challenges than smaller startups

Zoning for Integration
Establishing effective zones of responsibility for microservices, aligning them with business needs and ensuring a compact, well-defined structure during the adoption process


We have considered some useful patterns in the process of adoption, but what are the challenges, obstacles and success factors we can define?

Challenges

Cultural Shift: Resistance to change and barriers
Management: Distributed systems and inter-service communication.
Data Management: Database per service, proper data synchronization
Monitoring and Debugging: Effective monitoring and debugging

Success Factors

Incremental Adoption: Gradual migration to microservices
DevOps Practices: Collaboration, automation, and a faster release cycle.
Scalability and Performance: Designing microservices with scalability in mind
Effective Communication: Strong communication between teams


Part 3. Evaluating Evolutionary Strategies


But how to combine everything in order to unlock the full potential of microservices architecture. By saying that, I mean what strategies can we use to gradually transform our system?

Evolutionary Strategies

Strangler Fig pattern
Incrementally migrate a system by gradually replacing specific pieces of functionality with new applications and services. As features from the monolith system are replaced, the new system eventually replaces all of the old system's features, strangling the old system and allowing you to decommission it.

Image description

Branch-by-Abstraction technique

It is a very similar strategy. Gradually replace the old monolithic system
Instead of replacing components one by one, a new abstraction layer-bridge is introduced. All incoming requests are routed through the new abstraction layer

Image description


Part 4. Assessing Architectural Patterns


Here’s another thing to consider after switching to microservices architecture: how to use this new system in the most efficient way?

We can use Microservices Patterns. I am going to list only the most popular ones.

Decomposition patterns. It is all about dividing system, so every service has only one responsibility
Integration patterns. The main problem here is how we organize connections between individual services
Database Patterns. Regarding the splitting the database to make every access as efficient as possible
Observability Patterns. Monitoring of the system to maintain healthy work
Cross-Cutting Patterns. What’s the best way to divide services (Zoning) so every one of them work efficiently and independently


Now let’s break down best practices in microservices architecture

Avoid Under-Fragmentation at all costs

You must correctly distinguish your functions, services, microservices.
Failing to do so means you're likely to build microservices that aren't micro enough

RESTful APIs

Microservices architecture can create incredible value for your company with use of RESTful APIs
These APIs bring many advantages, like eliminating the need to install client-side software.

Restructure Teams
Building out teams to manage various microservices will empower them to work more efficiently.Creating microservices teams will improve delivery speed

Each microservice owns it data
Each one needs to completely own its data, which requires you to provide separate data storage for each one.

Microservices monitoring
Increased performance demands and a dynamic environment requires advanced monitoring.
A monitoring system will help address changes, resource allocation, and more

Educate your teams
Making your team members and leaders aware of the complexities and benefits of microservices architecture, to achieve successful transformation


Part 5. Future Directions and Challenges


Microservices architecture is a very interesting and powerful approach, you should at least try to use it in your application. In the end I want to discuss some future directions of microservices architecture and new opportunities it may introduce.

Automated Migration Tools
Automated migration tools to facilitate the transition
Tools that can analyze existing codebases, identify optimal microservices boundaries, and automate the refactoring process.

Hybrid Architectures
Managing hybrid architectures, where both monolithic and microservices coexist

Emerging Technologies (Edge Computing, AI)
Integration of edge computing with microservices to support decentralized processing.
Usage of AI in optimizing microservices architectures, including intelligent resource allocation and self-healing systems.

In conclusion, microservices architecture offers a powerful approach to developing your system, which enables independent and easily scalable services. Even if it’s not complete replacement to monolith architecture you should try it, and figure it out how it works for your specific needs

Resources:
"Microservices Patterns" by Chris Richardson's
https://microservices.io/
https://learn.microsoft.com/en-us/azure/architecture/patterns/strangler-fig
https://habr.com/ru/companies/raiffeisenbank/articles/346380/
https://codeit.us/blog/microservices-use-cases)

Top comments (1)

Collapse
 
__a9bd2403b9c profile image
Мирас Оразхан

love it!