There’s no shortage of great resources for those investigating microservices and how they can help their organization. Some of these great resources include Martin Fowler and Microservices.io – where one can find almost anything you need to know on the subject. With this post, I wanted to offer a succinct list of the advantages and disadvantages of microservices architecture, some of which will impact your decision to implement them in your enterprise’s IT infrastructure.
But first, a quick review:
What are microservices?
In today’s business environment, enterprises must respond to client needs and changing conditions more rapidly than ever. To keep up, software applications must be quick to deploy, easy to maintain, and always available. While traditional architecture can still handle a lot of this, there is a limit. At some point, a more dynamic, scalable approach to application development can become critical to the future of the business.
One such approach is a microservice architecture. Microservices promise quicker and easier software changes compared to traditional monolithic architectures by modularizing complex applications. Developers then compose applications from the resulting interchangeable, upgradable, and scalable parts. In an ideal world, this modular architectural style accelerates business growth by enabling the agile deployment of innovative functionality. However, decomposing applications can also add complexity compared to a monolithic model. And that is only scratching the surface of the tradeoffs.
As microservice architecture progresses along with hype cycle from inflated expectations to disillusionment to an upward path towards enlightenment, our understanding of its pros and cons have evolved. So, what are the advantages and disadvantages of microservices? Read on for the most common things we run into.
Microservices – or microservices architecture – are applications that are arranged or structured as a collection of loosely coupled services. In general, microservices have these characteristics:
Each microservice has its own data model and manages its own data.
Data moves between microservices using “dumb pipes” such as an event broker and/or a lightweight protocol like REST.
Small scope that encompasses a single piece of business functionality
Internal operations are a “black box”, accessible to external programs only via API
Microservices Architecture Advantages and Disadvantages
Below we will discuss the most common advantages and disadvantages of microservices architecture in an enterprise environment.
The Advantages of Microservices
Microservices work well with agile development processes and satisfy the increasing need for a more fluid flow of information.
Microservices are independently deployable and allow for more team autonomy
Each microservice can be deployed independently, as needed, enabling continuous improvement and faster app updates.
Specific microservices can be assigned to specific development teams, which allows them to focus solely on one service or feature. This means teams can work autonomously without worrying what’s going on with the rest of the app.
Microservices are independently scalable.
As demand for an app increases, it’s easier to scale using microservices. You can increase resources to the most needed microservices rather than scaling an entire app. This also means scaling is faster and often more cost-efficient as well.
Microservices reduce downtime through fault isolation.
If a specific microservice fails, you can isolate that failure to that single service and prevent cascading failures that would cause the app to crash. This fault isolation means that your critical application can stay up and running even when one of its modules fails.
The smaller codebase enables teams to more easily understand the code, making it simpler to maintain.
Microservice typically have small codebases, making them easier to maintain and deploy. It’s also much easier to keep the code clean and for teams to be wholly responsible for specific services.
The Disadvantages of Microservices
Given the speed of business today and the rise of new technologies making microservices management even easier, the list of advantages is getting longer than the disadvantages — but there are still some disadvantages. While much of the development process is simplified with microservices, there are a few areas where microservices can actually cause new complexity.
Microservices create different types of complexity than monolithic applications for development teams.
First, communication between services can be complex. An application can include dozens or even hundreds of different services, and they all need to communicate securely.
Second, debugging becomes more challenging with microservices. With an application consisting of multiple microservices and with each microservice having its own set of logs, tracing the source of the problem can be difficult.
And third, while unit testing may be easier with microservices, integration testing is not. The components are distributed, and developers can’t test an entire system from their individual machines.
Interface control is even more critical.
Each microservice has its own API, which apps rely on to be consistent. While you can easily make changes to a microservice without impacting the external systems interacting with it, if you change the API (the interface), any application using that microservice will be affected if the change is not backwards compatible.
A microservices architecture model results in a large number of APIs, all crucial to the operation of the enterprise — so interface control becomes mission-critical.
Up-front costs may be higher with microservices.
For microservices architecture to work for your organization, you need sufficient hosting infrastructure with security and maintenance support, and you need skilled development teams who understand and manage all the services.
If you already have these things in place, the costs involved in moving to microservices may be lower — but most enterprises that are currently running monolithic architecture will need to invest in the new infrastructure and developer resources in order to make the move.
Considering Microservices Advantages and Disadvantages
Clearly there are many advantages and disadvantages of microservices architecture to consider — but it’s important to consider your organizational culture and goals in this equation, too.
Enterprises more suited to microservices architecture are those that have an organizational culture comfortable with distributing work among small development teams. Also, microservices work best for organizations that need to innovate rapidly, and that have larger or more diverse user bases.
Microservices architecture advantages and disadvantages differ greatly from traditional monolithic architecture, and this model isn’t ideal for every organization. However, the big shift to this modular architectural style is happening for a reason — more enterprises are realizing the need for faster, easier, more agile application development, and microservices enable this in ways monolithic architecture simply cannot.