The cloud is central to the deployment of most applications today. But, that doesn't mean all applications use the cloud in the same way. In fact, there are several types of cloud application models.
In this article, we compare three of the most popular models: cloud-native vs. cloud-based vs. cloud-enabled. While we'll explore the general characteristics of each of these models, the true meaning of these terms lies in the eyes of their beholders. There are no official definitions and there are varying interpretations of what cloud-native applications, specifically, entail.
What is a cloud-native application?
A cloud-native application is designed to take full advantage of a cloud hosting architecture.
This type of app ensures that application components can deploy and scale independently of each other. Typically, it involves a microservices-based architecture which enables the application to consume cloud hosting resources as efficiently as possible. Each microservice can use exactly what it needs -- no more, and no less. At the same time, microservices can make the most use of autoscaling techniques to respond to fluctuations in demand.
Cloud-native applications are often deployed via containers. But they could also operate using serverless functions or, more rarely, as discrete processes running on the same host.
Technically, cloud-native applications don't have to run in the cloud. IT teams could deploy a loosely coupled, microservices-based app in a Kubernetes cluster hosted on on-premises infrastructure. In that case, the app wouldn't be hosted on the cloud, but would still scale seamlessly. This is thanks to its microservices architecture and Kubernetes' orchestration features.
Additionally, cloud-native development and cloud-native apps aren't mutually dependent. Developers can apply cloud-native development techniques to other types of apps. However, these practices are easier when working with distributed, microservices-based apps, in which individual components can be released separately.
Cloud-native app use cases
Cloud-native applications have become the default strategy for IT teams today. When building an application from scratch, it makes sense to use a cloud-native approach, provided developers have the resources to do so.
What is a cloud-based application?
A cloud-based application is any type of application that is hosted in the cloud.
Cloud-based apps are different from cloud-native apps in that cloud-based apps run in the cloud. Yet, this is the most generic term for describing applications that use the cloud in some way.
The term cloud-based application is also sometimes used to refer to software as a service (SaaS), a software delivery model in which users access an application through a web browser. However, cloud-based apps aren't always SaaS apps. An application whose server-side components are hosted in the cloud, but also require the installation of client-side software on user devices, could also count as a cloud-based app.
Some other examples of cloud-based applications include:
- cloud-native apps if they are designed and deployed using the approaches described above;
- a monolithic application running in a cloud-based VM;
- a bare-metal server cloud instance;
- an application deployed using a cloud-based application orchestration service, such as Amazon Elastic Beanstalk; and
- an application that runs as a serverless function on a service like AWS Lambda.
In other words, any type of app that operates in the cloud in any way is a cloud-based app.
Cloud-based app use cases
Any application could run as a cloud-based app. As such, the cloud-based model supports almost every type of application use case. The only apps that aren't excellent candidates for cloud-based deployment are those that need to remain on premises to meet compliance, security or data sovereignty requirements.
What is a cloud-enabled application?
The term cloud-enabled application refers to applications that were originally created to run on premises but moved to the cloud. It implies that developers performed a lift-and-shift migration to the cloud rather than refactor the application to run as a set of microservices using a cloud-native architecture.
For example, developers could upload a monolithic application that was originally hosted on premises to a cloud VM; this would create a cloud-enabled app. Developers may need to make some small changes to the app during the migration process, such as ensuring that it integrates properly with cloud-based identity and access management services and cloud networking configurations. However, they would not make extensive changes to the application's core code or architecture.
In contrast, a monolithic app that is refactored to fit a microservices architecture, then moved to the cloud, would qualify as a cloud-native app more than a cloud-enabled app.
Cloud-enabled applications are usually designed to run only in a certain type of environment or operating system. They are typically easy to move to cloud-based VMs, where the configurations of on-premises environments can be easily replicated. It's usually harder to move a cloud-enabled application to a platform like Kubernetes. In most cases, legacy on-premises apps aren't designed to run inside containers.
Cloud-enabled applications don't usually scale as well as cloud-native applications. To deploy more instances of a cloud-enabled app, IT teams can deploy more VMs to host it. This approach to scalability is more difficult to orchestrate, however, than deploying a cloud-native application using containers.
Cloud-enabled app use cases
Cloud-enabled apps are good fits for situations where businesses want to move a legacy app to the cloud in order to avoid having to maintain on-premises host infrastructure. However, because the underlying architecture stays the same, it doesn't reap the benefits of cloud, such as optimized performance.
Choose the right type of cloud application
When deciding which type of cloud application model to use, there are four main factors to consider.
1. Development resources. Cloud-native applications require the most skill to build. Businesses with small development teams or limited time to complete an app should choose a simpler type.
2. Performance. Cloud-enabled and generic cloud-based applications aren't likely to perform as efficiently as well-designed cloud-native applications.
3. Cloud service dependency. If developers deploy a generic cloud-based application with a cloud service that is specific to a certain cloud platform, such as Elastic Beanstalk, it may be harder to move to a different cloud in the future. In contrast, a cloud-native application hosted in Kubernetes can migrate to any cloud that supports Kubernetes.
4. Deployment and orchestration complexity. Cloud-native applications are more difficult to deploy and manage because they have more moving parts. IT teams will typically need to use an orchestration tool. Simpler cloud-based apps hosted in VMs don't require special orchestration layers.