Ever since the term “cloud native” made its debut in 2010, its usage has grown in popularity. However, a concise and accurate definition is not readily available. This article provides a set of related definitions for technical and non-technical stakeholders.
This blog post provides a concise and accurate definition of the concept cloud native. In addition, this blog post provides concise and accurate definitions of related concepts.
Responsiveness, Scalability, and Reliability
Responsiveness is defined as an application’s ability to meet its service level agreements (SLAs), such as response time or throughput.
Scalability is defined as responsiveness in the presence of load.
Reliability is defined as responsiveness in the presence of failure.
The combination of the scalability of an application and the reliability of an application is also referred to as the Elasticity of an application.
In practice, service level agreements must restrict the required scalability and reliability of an application. After all, a finite set of resources cannot sustain infinite load or infinite failure.
A Cloud Platform is a service provider that enables a service consumer to request and release resources on demand.
Consequently, a Non-Cloud Platform is any platform that does not enable the service consumer to request and release resources on demand.
According to this definition, a cloud platform is any provider that enables a service consumer to request and release resources on demand:
- A Public Cloud Platform is a service provider that offers resources outside its organization.
- A Private Cloud Platform is a service provider that offers resources within its organization.
- A Hybrid Cloud Platform is the union of a public cloud platform and a private cloud platform.
A Cloud Application is an application that is hosted on a cloud platform
Consequently a Non-Cloud Application is an application that is not hosted on a cloud platform.
For example, according to this definition, a vanilla Wordpress installation hosted on a cloud provider is a cloud application.
Cloud Native Application
A Cloud Native Application is a cloud application that is scalable and reliable by construction.
Consequently, a Non-Cloud Native Application is an application that is not scalable and reliable by construction.
The operator “by construction” is in stark contrast to “by requirement”: The design and implementation of a cloud native application guarantees scalability and reliability (within the limits set by SLAs).
According to this definition a cloud native application must be able to
- autonomously detect and mitigate the presence of load and
- autonomously detect and mitigate the presence of failure.
Note, that this definition does not state how an application needs to be able to detect and mitigate either load or failure — A wide range of detection and mitigation strategies exist.
For example, according to this definition, the aforementioned vanilla Wordpress instance is not a cloud native application as it lacks load and failure detection and mitigation facilities.
Common definitions state that cloud native applications are container packaged, microservice oriented, and dynamically orchestrated.
While cloud native applications commonly exhibit these characteristics, the characteristics themselves do not serve well as defining criteria:
Designing an application as a containerized application is a technical choice. Other technologies, like packaging applications as virtual machines, may be the appropriate choice and do not disqualify an application as a cloud native application.
Designing an application as a microservice oriented application is an architectural choice. Other architectures, like massively parallel batch processing, may be the appropriate choice and do not disqualify an application as a cloud native application.
While all cloud native applications are applications that rely on dynamic orchestration, not all applications that rely on dynamic orchestration are cloud native applications.
About this post
Concise and accurate definitions are essential to communicate complex concepts, both to technical and non-technical stakeholders. If we do not share a common vocabulary, we cannot share a common understanding!