Skip to content

Chapter 2

Why monolith applications struggle in the Cloud: challenges and solutions

Although most enterprises believe that the cloud will be the new home for legacy apps, not all legacy apps are a fit for the Cloud, at least not yet. 

Moving an application to the Cloud should be as easy as walking on the beach and collecting pebbles in a bucket and easily carrying them wherever needed. A 1000-ton boulder, on the other hand, is not easy to carry at all. 

This boulder represents the monolith application – sedimented layers of features and redundant logic translated into thousands of lines of code, written in a single, not so modern programming language, based on outdated software architecture patterns and principles. 

With time, the new features and improvements have increased the code complexity, making development more challenging – loading, compiling, and building times increase with every new update. However, there is some ease in administration as the application is running on a single server, ideally a Virtual Machine.

A monolith has a rather expensive taste in hardware. Being a large, single piece of software, which continuously grows, it has to run on a single system which has to satisfy its compute, memory, storage, and networking requirements. The hardware of such capacity is both complex and pricey. 

Since the entire monolith application runs as a single process, the scaling of individual features of the monolith is almost impossible. It internally supports a hardcoded number of connections and operations. However, scaling the entire application means to manually deploy a new instance of the monolith on another server, typically behind a load balancing appliance – another pricey solution. 

During upgrades, patches or migrations of the monolith application – downtimes occur and maintenance windows have to be planned as disruptions in service are expected to impact clients. While there are solutions to minimize downtimes for customers by setting up monolith applications in a highly available active/passive configuration, it may still be challenging for system engineers to keep all systems at the same patch level.