From Monolithic Pain to Microservices Hell

Which software architecture is right for your app? Learn the pros and cons of moving from monolithic to microservices architecture.

Digital Delivery
-
5 min
Digital Delivery
/
From Monolithic Pain to Microservices Hell

The secret to unlocking business agility and innovation in a competitive market lies with data. Harnessing the power in that data requires systems that can help make sense of the information.

Architecting and maintaining such a system is no easy feat. Companies will need to evaluate their application ecosystem to identify opportunities for improvement.

In this guide, we will discuss the impact of moving from monolithic to microservices and the impact of each.

What is a Monolith?

What do you get when you combine server-side application code, client-side code and database code in one executable?

monolithic architecture, microservices

A monolith.

And just like the name sounds, monoliths are complex applications with a huge codebase. The tightly coupled nature of the code makes deploying the application more than a mere hassle.

Making even a single minor change means you’ll need to recompile, test and redeploy the entire codebase. Managing these types of applications can be hard on a development team.

Challenges with monoliths

Monoliths have plenty of benefits, including simplicity of deployment, a lower learning curve for new developers and improved network latency. However, they are not without challenges.

1. Slow Start-up Time

Depending on the size of the application, start-up times can be significant.

2. Unable to Horizontally Scale

Scaling a monolith is an inefficient process that wastes resources. To scale, developers must deploy the entire application on multiple servers. Hence, horizontal scaling is challenging.

3. Less Reusability

Given the code for monoliths is tightly coupled, there are fewer opportunities for reusability.

4. Time-Consuming Bug Detection and Fixing

Tracking down bugs in a large application can be tedious and time-consuming. Monoliths are notorious for being difficult to debug and deploy fixes quickly. Not only that, a bug in one part of the application can bring the entire application to a halt.

What are microservices?

In contrast to a monolithic architecture, microservices refer to a suite of small “services” each running in its own process. The idea behind this approach is to split the application into a smaller set of services instead of a single monolithic codebase.

How microservices alleviate these problems

These lightweight services can be the saving grace of developers looking to redesign an application from monolithic to microservices or for building a new application.

1. Loose Coupling

One of the key benefits of microservices is that they are loosely coupled in that dependencies between services are minimized. This allows developers to change the code without impact to downstream systems.

2. Independently Deployable

Another benefit of this approach is that they are independently deployable, meaning you don’t need to redeploy an entire codebase to make a change.

3. Business-Oriented APIs

Microservices expose their functionality via business-oriented APIs that define a core business capability. This allows them to integrate with other systems via APIs.

4. Horizontal Scaling

When scaling a microservices application, developers only need to scale the service in question. Thus, they support horizontal scaling.

5. Reliability

An issue with one service typically does not harm the entire application. As a result, tracking and fixing bugs is much easier than a monolith.

The ugly side of microservices

Although microservices can be simpler to build, they can just as easily turn into a maintenance nightmare for site reliability engineers and developers if the system is not architected properly.

1. Dependency Hell

Michael Bryzek, co-founder and ex-CTO at Gilt, discussed at QCon New York how ‘dependency hell’ could impact the delivery and maintenance of microservice platforms.

Dependency hell refers to an issue that arises when several packages share dependencies but each relies on a different incompatible version of that package. Fixing the problem involves obtaining a newer version of the shared package.

However, this may break dependencies and cause problems in other packages.

2. Latency

Depending on the size of the application, there could be hundreds of services. As each of these services makes remote calls to interact with each other latency could become an issue.

3. Integration Testing

Testing services is more challenging than testing monoliths. Unit testing is simple, as developers only need to test the specific service. Integration testing however presents a fair share of challenges.

Integration testing a service means developers will need to launch the service being tested along with the services on which it depends.

When to use monolithic architecture

If you have a small team and a simple application, you may not want to deal with the complexity of microservices. A monolith can most likely meet your needs. You should also consider a monolith when the goal is to launch quickly.

Setting up a monolith architecture is much simpler than that of services.

When to use microservices

If your application is complex and requires more robust scaling capabilities, microservices are the way to go.

You can also consider them if your team has the expertise to architect and support the system. Moving from monolithic to microservices can help companies remain agile in a competitive marketplace.

There are pros and cons to each approach. Companies must evaluate each in the context of their needs to determine the best approach.

Here at Adservio, we are dedicated to sharing our expertise and best practices for digital transformation.

Contact us to learn how we can help empower your team for success on your digital transformation journey.

Published on
September 6, 2021

Industry insights you won’t delete. Delivered to your inbox weekly.

Other posts