Microservices is an architecture used to refactor a monolithic application into independently deployable services. These services benefit from being loosely coupled and highly cohesive. This approach is typically taken by companies that are feeling the pains involved growing data stores and slow deployment times that are characteristic of enormous enterprise applications. Companies that migrate their existing applications are better able to leverage the cloud and automation, resulting in highly scalable, quickly deployable, and resilient applications. The advantages of a microservices architecture are beyond the scope of this post. If you are more interested in learning about microservices, their advantages, and why companies choose this route, please review our microservices page.
While a microservices architecture can provide a multitude of benefits, they are not the ideal solution for every organization. When considering undertaking a microservices initiative it will be very important to ensure your organization culture, and business needs align with shifts that will be brought upon by a microservices migration. A good first step in determining if microservices is the right fit will be evaluating the disadvantages and challenges that a highly distributed application can pose, and determining whether or not your organization is prepared to make the switch.
The purpose of this article is to provide an overview of the disadvantages of a microservices architecture in order to provide you with information you will need to address these issues as part of your microservices migration planning.
The Disadvantages of a Microservices Architecture
The biggest disadvantage of a microservices architecture is its increased complexity over a monolithic application. The complexity of a microservices based application is directly correlated with the number of services involved. This type of architecture has many more moving parts than traditional applications, requiring enormous effort, careful planning, and especially automation in order to handle inter-service communication, monitoring, testing, and deployment. The reasons for the increased complexity are:
- Existing tools are not designed to work with service dependencies.
- Increase in language and frameworks can cause the application to become hard to maintain.
- As each service has its own database, transaction management and data consistency can become a nightmare.
- Each service has to be testing and monitored increasing demand for automation.
- The initial refactoring of a monolithic application can be exceedingly complex for large enterprise applications.
- Number of processes can grow exponentially when load balancing and messaging middleware are considered.
- Increases in documentation overhead as organization has to keep schemas and interface documents up to date.
- Numerous microservices patterns exist, will have to determine which is the best fit for your application.
A microservices initiative will require a cultural shift in organizations seeking to adopt them. They require a mature agile and DevOps culture. With a microservices based application, teams need to be enabled to manage the entire lifecycle of a service. This often requires migrating competencies and decision making from managers and architects to individual teams. This change in hierarchy can be difficult for some people within the organization to accept. Therefore, ensuring experienced members and upper management have bought into the initiative is an important first step. Also, communication between individuals and teams becomes much more challenging as teams may not always have visibility of the big picture and how individual services must work with each other to create a usable application.
An organization will also need to determine if their people possess the skills and experience necessary to take on a microservices based application. Because a team may be responsible for a single service, developers must be knowledgeable about developing, deploying, testing, and monitoring an application. It will also be a requirement to ensure you have DevOps and release automation skills as a component to each team.
Another disadvantage of a microservices architecture is growing costs. Services will need to communicate with each other, resulting in a lot of remote calls. These remote calls result in higher costs associated with network latency and processing than with traditional architectures. Developers will want to put forth their best efforts in order to reduce the number of calls. Another driver of increased cost is a higher resource demand as each service will require its own runtime environment and CPU. This is a requirement to keep each instance isolated. Also, due to each service utilizing its own language and technology stack, these application design and architecture non-uniformities can drive up the overall resources the organization expends on management and maintenance.
When compared to a monolithic application microservices pose enormous security challenges due to the increases in inter-service communication over the network. All of these interactions create an opportunity to outside entities to gain access to the system.
While microservices can pave the way to substantial improvements to an organizations culture, capabilities, and ability to complete, they are not without risk. Understanding and planning for the disadvantages of a microservices migration is the key to success. We hope after reading this article you are more aware and better prepared to tackle the challenge. Now that you are familiar with the disadvantages of a microservices architecture, feel free to read this article about microservices advantages.
If you would like more information, or assistance with planning and preparing for a microservices migration, we can help. We have helped dozens of companies decouple their monolithic applications and were able to successfully navigate the pitfalls that a complex microservices migration presents. Please drop us a line below, or give us a call, and we can help walk you through every step of your journey.
If you are interested in learning more about microservices please download our 11 page white paper "Making Microservices Work for Your Organization."