23 May 2022

Cloud-native or Monolithic Apps?

Cloud-native or Monolithic Apps

Are you about to work on a new software application or redesign a current one? If you do, there is an important decision to make - to do a traditional application or a cloud-native app? This decision will reflect on the cloud hosting infrastructure model you'll use.

A cloud-native app is a software application that is designed to be used in a cloud computing architectural model. Unlike the traditional apps that can be hosted on any cloud hosting infrastructure and benefit from the scalability, the result of the cloud computing model, the cloud-native apps are designed themselves to scale up and down based on the users' execution and demand for computing resources.

Cloud-native applications use a microservice software architectural model. The microservice architecture allocates computing resources to each service used by the application. This makes the software app quite flexible and adaptable to a cloud architecture.

Those who advocate for DevOps are big fans of cloud-native applications. DevOps is a fashionable trend that more or less represents a change in the approach to information technology development. DevOps is a combination of software development (dev) and operations practices (ops). It is a software engineering methodology that integrates the work of software developers and system administrators. The DevOps methodology comprises four principles:

  • Automation of the software development lifecycle
  • Collaboration and communication
  • Continuous improvement and minimization of waste
  • Focus on user needs with short feedback loops

The cloud-native apps are considered to be very agile, as they are built and delivered differently, compared to the traditional cloud-based apps that are called “Monolithic”. Unlike the monolithic apps, the cloud-native ones feature shorter application lifecycles and are claimed to be resilient, manageable, and observable.

According to Gitlab's blog in the monolithic software application architecture, “all the components are part of a single unit” that develops, deploys, and scales all components of the software application together. Software development teams who work on any monolithic software application have to write the software program in a single language with a single runtime. If a few or more teams work on different components of the same software app, they must follow the same organizational principle to prevent affecting negatively the other's work. Gitlab gives the following example for monolithic app development: “One part of the app may depend on a module that needs a specific version, say 1.8, while another team needs the same module but requires the 1.7 version because 1.7 is incompatible with another dependency.” One of the versions has to be picked. Due to the model of monolithic apps' development, the software teams have to deploy everything as a single application, requiring testing and deploying code together.

On the contrary, in the cloud-native application development based on microservices, each app component is “broken out and deployed individually as services and the services communicate with each other via API calls.” The microservice architectural style means that the applications are built as suites of services.

The way software development teams choose to work impacts the Cloud infrastructure used to power the applications. If you are a business owner who has to make an important decision whether to go with a "monolithic software application" or a "cloud-native app", you need to know that once you go for a "cloud-native app" you cannot go back. Although the cloud-native apps have many advantages, they require a much more sophisticated model of software engineering and cloud infrastructure, therefore a more expensive one. The popular software developer Martin Fowler has published an article on Microservices” that explains the characteristics of a microservice architecture.

Hosting & Cloud IaaS

Cloud-native apps can be built and hosted on containerized apps and Kubernetes, for example. Kubernetes allows for hosting and running containerized microservices and is a container orchestration system to automate the management, scaling, and deployment of microservice applications. It has become a popular framework that allows app owners to run cloud-native apps in hundreds or thousands of containers at a production scale.

From the IaaS point of view, there is no preference for the software development model. Providers like HostColor.com provide infrastructure services for hosting both monolithic software applications and microservice-based apps. What is important for us is our clients to understand is that creating and using cloud-native apps require the adoption of whole different technology culture and organization. It might be agile and efficient if the organization is prepared to adopt it. If it does not, however, it might result in high costs for development and infrastructure.