In my previous two blogs, I spoke about breaking a monolithic application into microservices. We also considered if it is essential to convert every monolithic application and the answer was, well, it may not be. These applications were developed decades ago to digitize the manual process of organizations. Monolithic applications were easier to develop and were less prone to integration-related issues since the modules only had minimum or fewer dependencies. Over a period of time, object-oriented design patterns started evolving and concepts like service-oriented architecture & aspect-oriented designs were introduced in the application development process. It led to benefits such as reusability of modules / APIs, independent releases of features into these modules, and cost savings around testing cycles. By now, customers had started to realize the limitations of monolithic architectures as well, which were mainly around lengthy release cycles of new features releases, huge cost of testing every time a change was being released, portability, and technical debt.
These benefits of loosely coupled design along with limitations in monolithic design led to a shift away from monolithic design in the development process. Customers started re-architecting these applications to loosely-coupled architectures as well. But there was still a good chunk of monolithic applications which remained as-is in customers’ landscape due to their business criticality and risk of revenue leakage in case of issues.
Over a period of time, the cost of maintaining the operations and storage for the exponentially growing data on-premises forced customers to look for optimized solutions like cloud hosting solutions. Customers started seeing the cost benefits of cloud hosting for storing their data on the cloud at a much cheaper cost. Cloud hosting introduced a pay-as-you-go model without worrying about the support of underlying infra operations. This is where customers started triggering the hosting of application servers also on the cloud in a lift & shift manner since the cloud gets the latest platform out of the box and takes the responsibility of upgrading it on a need basis. This introduced a solution for huge monolithic systems, to migrate them to the cloud and reduce the cost of operations.
Cloud has come up with its own innovations, business models and technology trends aligned to the latest devices in the market. A new way of working and new business models brought in more competition to business and a demand to add new features to adapt these business models. Systems built on the latest architectures are able to adapt to these changes but frequent changes to monolithic systems are not that quick and sometimes lack technical feasibility. Additionally, the launch of multiple cloud providers and their lucrative cost for the pay-as-you-go model forced customers to have their applications easily portable from one cloud to another.
While most of the applications were upgraded to a new architecture, there were applications that could not be upgraded and remained monolithic. With cloud migration happening almost in all the customer’s landscape, containerization of monolithic applications is being seen as a first step to modernize these applications. Containerized deployment is based upon the principle of packaging all its OS and external libraries dependencies together with application code, making it a more independently running program as shown below:
Containerized deployment approach is able to provide most of the benefits for monolithic applications as well i.e. portability, faster releases and elasticity. Once a container image is built, tested and released, it can be defined as a base image for delta changes in the application codes. Adding incremental code changes on top of base images always runs through the same process of release automation i.e. code & image build, move to a container registry, security scan & code analysis, functional automation testing, automated configuration of application dependencies & integrations.
In this way, redeploying monolithic applications as containers definitely brings some benefits to our customers in terms of:
- Optimized cost of releasing new features and having an edge over the competition
- Easily portable to any platform or operating system to avoid vendor lock-ins
- Additional compute on a click of a button in the form of additional containers
- Ease of deploying new releases using blue/green or Canary release methodology
- Operational excellence and reduction of errors in production during new releases
In summary, not all monolithic applications might be a good candidate for containerization, but the customer should take a cautious decision on considering business-critical applications for the same. It would be the first step toward the modernization of these applications without spending huge money. It will also bring in benefits around the release, testing & operational processes for these applications.